1

我有以下课程,我想做一个深拷贝。

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

4

2 回答 2

1

由于没有内置的方法可以对对象进行深度复制,因此您必须提供自己的方法才能这样做。

IKeySetup通过将/的实现者包含在接口中来强制实现IKeyDataDeepCopy 可能是个好主意。要求ICloneable可能是另一种方法 - 编译时(通过派生IKeySetup/IKeyDataICloneable)或运行时通过 trhowing if object does not support ICloneable

于 2012-08-13T21:11:48.577 回答
0

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

于 2012-08-14T04:47:44.423 回答