【发布时间】:2014-02-26 07:49:05
【问题描述】:
我的一个朋友问我这个问题。虽然我回答了它,但我不是很相信自己。我所寻求的只是满足或纠正。代码sn-p如下:
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 时,它开始指向dt1 指向的DataTable 而不是那个创建的。
我不太相信我给出了正确的解释,尤其是。关于dt3的部分。所以我希望社区要么纠正我,要么向我保证我是对的。
【问题讨论】:
-
是的,没错。第二种形式毫无意义。您创建了一个新的
DataTable,但随后立即通过将dt3分配给dt1来丢弃您对它的唯一引用,因此新创建的DataTable只是被安排进行垃圾收集,而无需执行任何操作。
标签: c# .net object heap-memory stack-memory