クローン可能にしたいいくつかの異なるクラスがあります: GenericRow
、GenericRows
、ParticularRow
、およびParticularRows
。次のクラス階層があります。 GenericRow
は の親でありParticularRow
、GenericRows
は の親ですParticularRows
。ICloneable
各クラスのインスタンスのディープ コピーを作成できるようにするために、各クラスを実装します。Clone()
各クラスでまったく同じコードを書いていることに気づきました。
object ICloneable.Clone()
{
object clone;
using (var stream = new MemoryStream())
{
var formatter = new BinaryFormatter();
// Serialize this object
formatter.Serialize(stream, this);
stream.Position = 0;
// Deserialize to another object
clone = formatter.Deserialize(stream);
}
return clone;
}
次に、次のような便利なラッパー メソッドを提供しますGenericRows
。
public GenericRows Clone()
{
return (GenericRows)((ICloneable)this).Clone();
}
コードは非常に小さく、戻り値の型、キャストなどによってクラスごとに異なるため、各クラスでほぼ同じように見える便利なラッパーメソッドで問題ありません。ただし、 4つのクラスすべてICloneable.Clone()
で同じです。これを何らかの形で抽象化して、1 か所だけで定義することはできますか? 私の懸念は、ユーティリティ クラス/object
拡張メソッドを作成した場合、コピーしたい特定のインスタンスのディープ コピーが正しく作成されないことでした。とにかくこれは良い考えですか?