実装することはお勧めできないことを知ったのでICloneable
( Deep Copy と Shallow Copy を区別しないため)、抽象として実装するかインターフェイスとして実装するかを決定しようとしています。
私の実装は、バイナリのディープ コピーとMemberwiseClone
シャロー コピーなど、ほぼ同じままであると感じているため、そのためには抽象メソッドが理想的であると感じました。ただし、私の理解では、C# は複数の継承を行わないため、別の抽象クラスを使用する必要がある場合は、もう使用できません。
その場合、カスタムICloneable
(例: ICustomCloneable
) を実装する方が良いと思いますが、実装が多くのクラスで実質的に同じである場合、コードの再利用を十分に活用していないように感じます。
そうは言っても、インターフェイスを使用して、複製可能なクラスでより重要なことのために抽象継承を明確に保つことは有効ですか? または、これを行う別の方法はありますか?
あるいは、アブストラクトが別のアブストラクトを実装することは有効ですか (読む: 臭くありません)? これは、CloneCapable クラスと別の抽象クラスの実装を妨げる単一継承を回避するための私の推測ですが、疑わしいように思えます。例えば:
public abstract class CloneCapable
{
public object ShallowCopy()
{
// implementation
}
public object DeepCopy()
{
// implementation
}
}
public abstract class ClassA : CloneCapable {}
// abstract-abstract since I can't do ClassB : ClassA, CloneCapable
public abstract class ClassB : ClassA {}