什么是复制构造函数以及何时应在 c# 中使用它



实际上我不明白它的概念,这意味着为什么以及何时应该使用它。通常,我们可以为类的实例赋值,但是为什么我们应该像这样将对象发送到另一个对象:

    private void button8_Click(object sender, EventArgs e)
    {
        rectangle r1 = new rectangle(50, 70);
        rectangle r2 = new rectangle(r1);
    }

class rectangle
{
    private int length;
    private int breadth;

    public rectangle(rectangle x)
    {
        length = x.length;
        breadth = x.breadth;
        MessageBox.Show("I'm a Copy Constructor. n Length= " + length.ToString() + "n breadth= " + breadth.ToString());
    }
}

复制构造函数是从C++借来的概念:这个构造函数的唯一目的是从现有对象制作副本。此外,如果程序员不提供复制构造函数,编译器会自动在C++(隐式复制构造函数)中定义复制构造函数。你可以混合:对于具有特殊复制行为的类,你提供复制构造函数。对于其他类,隐式复制构造函数将调用自定义的构造函数(如果该类具有此类型的成员)。

摘要:C++ 中的复制构造函数是复制对象及其成员的简单方法。诀窍是你不必显式提供一个,它在编译器级别受支持。

据我所知,C# 中没有隐式复制构造函数。您可以在 C# 中使用克隆,而不是这个特殊的构造函数。例如,请参阅此问题。

另一个注意事项:structs是在同理上复制的,但不是递归的。即使没有隐式复制构造函数,它也只是一个简单的内存副本。

有关C++复制构造函数,请参阅 C++14 标准中的第 288 页第 12.8 节。

这是一种完全或部分初始化从源对象复制成员值的对象的方法。

在您的情况下,您可以将其称为映射对象

或者,rectangle类可以实现一个静态方法,如CreateFrom,它将作为当前构造函数工作,它也像工厂方法一样工作:

class rectangle
{
    private int length;
    private int breadth;
    public static rectangle CreateFrom(rectangle x)
    {
        rectangle r = new rectangle();
        r.length = x.length;
        r.breadth = x.breadth;
        return r;
    }
}

。也许这样你会发现你的事件处理程序代码更有趣:

private void button8_Click(object sender, EventArgs e)
{
    rectangle r1 = new rectangle(50, 70);
    rectangle r2 = rectangle.CreateFrom(r1);
}

最新更新