【发布时间】:2011-02-24 07:25:31
【问题描述】:
我想克隆几个不同的类: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();
}
我很满意每个类中的便利包装方法看起来都差不多,因为它的代码非常少,而且它确实在返回类型、类型转换等方面因类而异。但是,@987654334 @ 在所有四个类中相同。我可以以某种方式抽象它,以便它只在一个地方定义吗?我担心的是,如果我创建了一些实用程序类/object 扩展方法,它不会正确地制作我想要复制的特定实例的深层副本。这是个好主意吗?
【问题讨论】:
标签: c# clone dry abstraction deep-copy