【发布时间】:2019-01-15 03:34:06
【问题描述】:
我有一个基类 (A) 和一个交付基类 (B)。它们继承了我制作的ICloneable<> 通用接口:
interface ICloneable<T>
{
T Clone();
}
我想覆盖B 中的A.Clone() 方法,但是B.Clone() 返回一个B 类型的对象而不是A,但是,覆盖不允许这样做。
我有某种解决方法,但我觉得它真的很难看:
class A : ICloneable<A>
{
virtual A Clone() => /*magic*/;
}
class B : A, ICloneable<B>
{
B CloneAsB() => /*other kind of magic*/;
override A Clone() => CloneAsB();
}
(我还添加了非泛型ICloneable的显式实现,但没有在示例中展示。)
有没有更好的方法来实现这一点,而不必有一个 false 克隆方法?
【问题讨论】:
-
c# 还不支持。您的解决方法很丑陋,因为您仍在强迫自己这样做。实现这一点的更好方法是不使用 ICloneable 接口,让每个类都有自己的克隆方法,而无需虚拟/覆盖。
标签: c# inheritance overriding clone cloning