【发布时间】:2014-07-09 10:03:16
【问题描述】:
不确定这是否是 codeReview 帖子,但我们开始吧:
我的目标是重新实现在我们的应用程序中复制对象的方式。我们有多个基类:
CoreList<T> // for all list classes
BasicReference // for all reference classes
CoreObject // for all "normal" domain objects
所有类都继承自这些基类。现在复制方法是在CoreObject类上实现的,它将通过反射遍历对象树,查看每个属性类型并选择正确的复制类型的方法,最后总是返回CoreObject。
这种方法有一些我不喜欢的问题,这就是我想改变它的原因:
- 复制域对象后,您始终必须将其“转换回”为原始类型,例如:
Animal = animal.Copy() as Animal; - 复制每种类型的所有逻辑都在 CoreObject 类中,即使它不应该知道其他基类。
所以我的第一次尝试是引入一个接口:
public interface IObjectCopy<out T>
{
T Copy();
}
然后应该在所有基类上实现。然后每个类负责它被复制的方式。例如(伪代码):
public class CoreObject : IObjectCopy<CoreObject>
{
public virtual GerCoreObject Copy()
{
foreach (var prop in properties)
{
if (prop.IsNoSimpleType)
{
(prop as IObjectCopy).Copy()
}
}
}
这解决了复制责任问题,此外继承的类可以自己处理复制逻辑。
不幸的是,这并没有解决返回类型,我仍然必须将它转换为正确的类型。我没有想到更好的解决方案来解决这个问题。有什么想法吗?
【问题讨论】:
标签: c# inheritance copy polymorphism