我有以下课程,我想深入复制。
public class KeyInfo
{
public KeyInfo(IKeySetup keySetup, IKeyData data)
{
KeySetup = keySetup;
Data = data;
}
public IKeySetup KeySetup { get; set; }
public IKeyData Data { get; set; }
public KeyInfo DeepCopy()
{
var keyInfo = (KeyInfo) this.MemberwiseClone();
return keyInfo;
}
}
如何复制界面?我是否必须为接口实现ICloneable,然后让每个具有其中一个接口的类实现Clone()?有没有办法避免每个类必须实现这样的功能?
答案 0 :(得分:1)
由于没有内置的方法来执行对象的深层复制,因此您必须提供自己的方法才能执行此操作。
强制IKeySetup
/ IKeyData
的实施者通过将DeepCopy包含在界面中来获得DeepCopy可能是个好主意。要求ICloneable
可能是另一种方法 - 编译时(通过从IKeySetup
派生IKeyData
/ ICloneable
)或运行时通过实现对象不支持{{1 }}
答案 1 :(得分:0)
您可以使用Fasterflect方法通过emit复制对象。