c# - 通用 C# 复制构造函数

标签 c# constructor copy

为我的 C# 类编写通用复制构造函数的最佳方法是什么? 它们都继承自抽象基类,因此我可以使用反射来映射属性,但我想知道是否有更好的方法?

最佳答案

复制构造函数基本上意味着您只有一个参数,即您要复制的对象。

此外,进行深拷贝,而不是浅拷贝。

如果您不知道什么是深拷贝和浅拷贝,那么请注意:

假设您正在复制一个类,该类将一行整数作为字段。

浅拷贝是:

public class Myclass()
{
    private int[] row;
    public MyClass(MyClass class)
    {
        this.row = class.row
    }
}

深拷贝是:

public class Myclass()
{
    private int[] row;
    public MyClass(MyClass class)
    {
        for(int i = 0; i<class.row.Length;i++)
        {
            this.row[i] = class.row[i];
        }
    }
}

深拷贝真正获取实际值并将它们放入新对象的新字段中,而浅拷贝仅复制指针。

对于浅拷贝,如果你设置:

row[3] = 5;

然后打印两行,两行都将 5 作为第 4 个数字的值。 然而,对于深拷贝,只有第一个打印会有这个,因为行没有相同的指针。

关于c# - 通用 C# 复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/433926/

相关文章:

c# - 在子列表中传递带有过滤器/组的对象

C++ 错误、类和构造函数

powershell - 如何复制特定文件并将其粘贴到其他位置保存结构?

java - 你能用 Java 编写一个需要无参数构造函数或工厂的接口(interface)吗?

mysql - 将 MySQL 列中的值复制到另一列,但已格式化

csv - Cassandra 中的 COPY 命令将 csv 文件中的句子插入相邻单元格

c# - 如何使用 Xamarin C# 获取手机屏幕尺寸?

c# - 打开没有vsto插件的excel

c# - 使用多个文件发布 StreamContent

c++ - 类类名(值);和类类名=值;显式构造函数时的区别