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を実装してから、それらのインターフェイスの1つを持つすべてのクラスにClone()を実装させる必要がありますか?各クラスがそのような関数を実装する必要を回避する方法はありますか?

4

2 に答える 2

1

オブジェクトのディープコピーを実行する組み込みの方法がないため、実行できるように独自の方法を提供する必要があります。

IKeySetup/の実装者にIKeyDataDeepCopyをインターフェースに含めることで強制するのは良い考えかもしれません。要求ICloneableは別のアプローチである可能性があります-コンパイル時(IKeySetup/IKeyDataから派生することによるICloneable)またはオブジェクトがサポートしていない場合はtrhowingによる実行時のいずれかICloneableです。

于 2012-08-13T21:11:48.577 に答える
0

Fasterflectメソッドを使用して、emitを介してオブジェクトをコピーできます。

于 2012-08-14T04:47:44.423 に答える