包含接口的深层复制对象

时间:2012-08-13 21:02:54

标签: c# .net

我有以下课程,我想深入复制。

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()?有没有办法避免每个类必须实现这样的功能?

2 个答案:

答案 0 :(得分:1)

由于没有内置的方法来执行对象的深层复制,因此您必须提供自己的方法才能执行此操作。

强制IKeySetup / IKeyData的实施者通过将DeepCopy包含在界面中来获得DeepCopy可能是个好主意。要求ICloneable可能是另一种方法 - 编译时(通过从IKeySetup派生IKeyData / ICloneable)或运行时通过实现对象不支持{{1 }}

答案 1 :(得分:0)

您可以使用Fasterflect方法通过emit复制对象。