【发布时间】:2013-08-05 18:20:00
【问题描述】:
据我所知,不建议实现ICloneable (due to the fact that it does not differentiate between Deep Copy or Shallow Copy),我正在尝试确定我应该将其实现为抽象还是接口。
我觉得我的实现将基本保持不变,例如一个binary deep copy 和一个MemberwiseClone shallow copy,所以为此我觉得抽象方法是理想的。但是,我的理解也是 C# 不做多重继承,因此如果我需要使用 another 抽象类,那么我不再可以。
在这种情况下,我觉得实现自定义ICloneable(例如ICustomCloneable)会是更好的选择,但如果在许多类中实现实际上是相同的,我觉得我没有充分利用代码重用。
话虽如此,对于我的可克隆类中更重要的事情,使用接口来保持抽象继承清晰是否有效?还是有其他方法可以做到这一点?
或者,一个抽象实现另一个抽象是否有效(阅读:不臭)?这是我对绕过阻止我实现 CloneCapable 类以及另一个抽象类的单一继承的猜测,但这听起来可能是有问题的。例如:
public abstract class CloneCapable
{
public object ShallowCopy()
{
// implementation
}
public object DeepCopy()
{
// implementation
}
}
public abstract class ClassA : CloneCapable {}
// abstract-abstract since I can't do ClassB : ClassA, CloneCapable
public abstract class ClassB : ClassA {}
【问题讨论】:
标签: c# interface abstract-class icloneable