拷贝构造函数需要什么?
What is the need of copy constructor?
当我只需使用以下 C# 语句就可以将一个对象复制到另一个对象时,为什么还需要复制构造函数?
objNew=objOld;
Why do I need copy constructor when I can copy one object to the another just by using the following C# statement?
默认情况下,C# 不提供复制构造函数。
复制构造函数是指将一个对象的数据复制到另一个对象的构造函数。
这意味着如果你想在复制对象的过程中操作你的数据,你需要定义一个复制构造函数。
您没有 "copy" 带有 objNew = objOld
的对象。您创建一个参考,而不是一个副本;看到这个
Parent a = new Parent() { ID = 1, Name = "A" };
Parent b = a;
b.ID = 2;
Console.WriteLine(a.ID); // output is 2
而 Parent 是一些具有 ID 和名称的对象。
如果您看到输出 written = 2,为什么?因为 a = b 因此:a.ID = 2(而不是您对 "copy" 的期望值 1 > 它是具有不同名称的同一个对象)。
参见这篇文章的值与引用类型(一般编程); http://www.albahari.com/valuevsreftypes.aspx
你想要的(或期待的)更多的是这个:
Parent a = new Parent() { ID = 1, Name = "A" };
Parent b = a.Clone(); // or copy or whatever you want to call it
b.ID = 2;
Console.WriteLine(a.ID); // here we have 1 now
当我只需使用以下 C# 语句就可以将一个对象复制到另一个对象时,为什么还需要复制构造函数?
objNew=objOld;
Why do I need copy constructor when I can copy one object to the another just by using the following C# statement?
默认情况下,C# 不提供复制构造函数。
复制构造函数是指将一个对象的数据复制到另一个对象的构造函数。
这意味着如果你想在复制对象的过程中操作你的数据,你需要定义一个复制构造函数。
您没有 "copy" 带有 objNew = objOld
的对象。您创建一个参考,而不是一个副本;看到这个
Parent a = new Parent() { ID = 1, Name = "A" };
Parent b = a;
b.ID = 2;
Console.WriteLine(a.ID); // output is 2
而 Parent 是一些具有 ID 和名称的对象。 如果您看到输出 written = 2,为什么?因为 a = b 因此:a.ID = 2(而不是您对 "copy" 的期望值 1 > 它是具有不同名称的同一个对象)。
参见这篇文章的值与引用类型(一般编程); http://www.albahari.com/valuevsreftypes.aspx
你想要的(或期待的)更多的是这个:
Parent a = new Parent() { ID = 1, Name = "A" };
Parent b = a.Clone(); // or copy or whatever you want to call it
b.ID = 2;
Console.WriteLine(a.ID); // here we have 1 now