我的一个朋友问我。尽管我回答了,但我并没有说服自己。我所寻求的只是满足感或纠正。该代码段如下:
class Program
{
static void Main(string[] args)
{
DataTable dt1 = new DataTable("Customer");
dt1.Columns.Add("ID", typeof(int));
//and some more columns
dt1.Rows.Add(1);
*****//what is the difference between doing
DataTable dt2 = dt1;
//vs.
DataTable dt3 = new DataTable();
dt3 = dt1;*****
}
}
到目前为止,据我所知,使用
new
关键字将在堆上创建对象,并在堆栈上创建指针变量,而堆栈仅用于诸如int,double等简单数据类型和指针。根据我的理解,我解释说
dt2
将在能够指向堆中任何DataTable
类型的堆栈上创建,并且当我们将dt1
分配给dt2
时,它将指向相同的数据表dt1
指向。对于dt3,将在堆上创建一个新的数据表对象,并且dt3
指向该对象,但是当我们执行dt3 = dt1
时,它开始指向由DataTable
指向的dt1
而不是一个创建。我不是很自信,尤其是我给出了适当的解释。关于
dt3
的部分。因此,我希望社区能够纠正我,或者向我保证我是对的。 最佳答案
总的来说,你是对的。在DataTable dt3 = new DataTable();
行中,创建一个新的DataTable
对象,并带有dt3
引用指向该对象。然后,在dt3 = dt1
之后,您将忽略该对象。 dt3
指向先前创建的对象,即:new DataTable("Customer")
。您“忘记”的对象可能会被垃圾回收,因为没有引用。
关于c# - 实例化然后分配与声明之后再分配之间的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21516968/