我的一个朋友问我。尽管我回答了,但我并没有说服自己。我所寻求的只是满足感或纠正。该代码段如下:

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/

10-09 19:13