复制构造函数需要什么?

时间:2015-01-06 06:29:39

标签: c# constructor

为什么我只需要使用以下C#语句就可以将一个对象复制到另一个对象时需要复制构造函数?

objNew=objOld;

2 个答案:

答案 0 :(得分:4)

您没有使用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和名称的对象。 如果你看到输出写= 2,为什么?因为a = b因此:a.ID = 2(而不是你对“副本”所期望的那个>它是具有不同名称的同一个对象)。

参见本文的值与引用类型(通用编程); 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

答案 1 :(得分:0)

  

为什么我只需要使用以下C#语句就可以将一个对象复制到另一个对象时需要复制构造函数?

默认情况下,C#不提供复制构造函数。

复制构造函数是指将一个对象的数据复制到另一个对象的构造函数。

这意味着如果您想在复制对象期间操纵数据,则需要定义复制构造函数。

Write a Copy Constructor