C#中用于用户定义类的通用深度复制

本文关键字:深度 复制 用于 用户 定义 | 更新日期: 2023-09-27 17:58:43

我在编写通用深度复制方法时遇到了一个问题,该方法将具有不同命名空间的相同结构的类1复制到类2。在网上搜索后,我可以在一个级别上进行映射,但问题是,如果属性引用了其他用户定义的类,如何进行递归深度复制。下面是示例类,以便更清楚地显示:从下面的示例中,我试图将Namespace1.class1复制到Namespace2.class1(class1、GenderType、Subject同时存在于Namespace1和Namespace2中)。

Namespace1.Student
{
 String Name {get;set;}
 Int Age {get;set;} 
 List<Subject> lstSubjects {get;set;} //Here we need recursive copy.
 GenderType gender {get;set;}
} 
Enum GenderType
{
  Male,
  Female
}
NameSpace1.Subject
{
   string subjectName {get;set;}
   string lecturereName {get;set;}
}

C#中用于用户定义类的通用深度复制

尝试为每个类使用复制构造函数,它可以克隆所有字段。您可能还想引入一个接口,例如IDeepCloneable,它强制类实现一个调用复制构造函数的方法DeepClone()。要在不强制转换的情况下确保克隆类型的安全,可以使用自引用结构。

看看以下内容:

interface IDeepCloneable<out T>
{
    T DeepClone();
}
class SomeClass<T> : IDeepCloneable<T> where T : SomeClass<T>, new()
{        
    // copy constructor
    protected SomeClass(SomeClass<T> source)
    {
        // copy members 
        x = source.x;
        y = source.y;
        ...
   }
    // implement the interface, subclasses overwrite this method to
    // call 'their' copy-constructor > because the parameter T refers
    // to the class itself, this will get you type-safe cloning when
    // calling 'anInstance.DeepClone()'
    public virtual T DeepClone()
    {
        // call copy constructor
        return new T();
    }
    ...
}