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

标签 c# constructor copy-constructor

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

    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# 中使用克隆。参见 this question , 例如。

另一个注意事项:structs 在赋值时被复制,但不是递归的。即使有no implicit copy constructor ,它只是一个简单的内存副本。

对于 C++ 复制构造函数,请参阅 section 12.8, page 288 in the C++14 standard例如。

关于c# - 什么是复制构造函数以及何时应在 C# 中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35675010/

相关文章:

java - 子类化泛型 - 构造函数继承

c++ - 为什么做赋值不会使对象指向同一位置

c# - 将身份资料保存在单独的数据库中

c# - 某些站点不允许两次请求同一文件 (IDM)

C++:在方法内部可以从类创建未初始化的对象吗?

c++ - 双向链表的复制构造函数(C++)

c++ - 创建对象的拷贝

c# - 设置页面标题

c# - 如何在不使用 AppDomains 的情况下实现 .net 插件?

c++ - 默认构造函数中未识别的标识符