gpt4 book ai didi

c# - 实例化然后分配与声明和分配之间的区别?

转载 作者:行者123 更新时间:2023-12-03 19:08:52 26 4
gpt4 key购买 nike

我的一个 friend 问我这个。虽然我回答了,但我不太相信自己。我所寻求的只是一种满足或一种纠正。代码片段如下:

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 类型,并且当我们分配 dt1dt2,它会指向同一个数据表dt1。对于 dt3,在堆上创建了一个新的数据表对象,dt3 将指向它,但是当我们执行 dt3 = dt1 时,它开始指向DataTabledt1 指向,而不是创建的那个。

我不太确定我是否给出了正确的解释,尤其是。关于dt3 的部分。所以我希望社区能纠正我或向我保证我是对的。

最佳答案

总的来说,你是对的。在 DataTable dt3 = new DataTable(); 行中,您创建了一个新的 DataTable 对象,dt3 引用指向它。然后,在 dt3 = dt1 之后,您忘记了这个对象。 dt3 指向之前创建的对象,即:new DataTable("Customer")。您“忘记”的对象可能会被垃圾回收,因为没有对它的引用。

关于c# - 实例化然后分配与声明和分配之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21516968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com