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;}
}
尝试为每个类使用复制构造函数,它可以克隆所有字段。您可能还想引入一个接口,例如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();
}
...
}