我有几个不同的类希望被克隆: 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();
}
我对每个类中看起来大致相同的便利包装器方法感到满意,因为它的代码非常少,而且它在返回类型、强制类型转换等方面确实因类而异。但是,在所有四个类中ICloneable.Clone()
都是相同的。我可以以某种方式抽象它,以便它只在一个地方定义吗?我担心的是,如果我制作了一些实用程序类/object
扩展方法,它不会正确地制作我想要复制的特定实例的深层副本。无论如何,这是个好主意吗?