据我所知,不建议实现ICloneable
(因为它不区分 Deep Copy 或 Shallow Copy),我正在尝试确定我应该将它实现为抽象还是接口。
我觉得我的实现将基本保持不变,例如二进制深拷贝和MemberwiseClone
浅拷贝,所以为此我觉得抽象方法是理想的。但是,我的理解也是 C# 不做多重继承,因此如果我需要使用另一个抽象类,那么我不再可以。
在这种情况下,我觉得实现自定义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 {}