我有幾個不同的類,我想要可複製:GenericRow
,GenericRows
,ParticularRow
和ParticularRows
。有以下類層次結構:GenericRow
是ParticularRow
的父級,GenericRows
是ParticularRows
的父級。每個類實現ICloneable
,因爲我想能夠創建每個實例的深層副本。我發現自己寫完全相同的代碼爲Clone()
每一類:幹幾個類的ICloneable的實現
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();
}
我很好的便利包裝方法尋找因爲它的代碼非常少,所以確實不一樣因類別不同而不同,但是,ICloneable.Clone()
是相同在所有四個類別中。我能否以某種方式抽象出它,因此它只能在一個地方定義?我擔心的是,如果我製作了一些實用程序類/ object
擴展方法,它不會正確地複製要複製的特定實例的深層副本。無論如何,這是一個好主意嗎?
將'this'添加到'T record'參數聲明中,並且在每個類中甚至不需要克隆方法(即將DeepCopyViaBinarySerialization轉換爲擴展方法)。 – dtb 2010-05-26 17:33:23
反對ICloneable的參數鏈接:http://blogs.msdn.com/b/brada/archive/2004/05/03/125427.aspx – drewburlingame 2010-05-26 18:19:45