假设我们有一个接口(interface)层次结构:IBaseThing<T>
和 IChildThing:IBase<ChildThing>
.
还有两个这样的类:
internal abstract class Base<T>
{
public abstract IBaseThing<T> Thing {get;}
}
和
internal class Concrete:Base<ChildThing>
{
public override IChildThing Thing
{
get
{
return GetChildThing();
}
}
}
接下来会发生什么:
'Concrete' does not implement inherited abstract member 'Base.get'
我想跳过类型转换 (IChildThing)this.Thing
遍布Concrete
类(class)。
我该怎么办?
最佳答案
你不能那样做。类型系统正确地反对您尝试更改重写类中的方法类型。 IChildThing 可能派生自 IBaseThing,但它们不是一回事。例如,稍后您可能会向 IChildThing 添加更多方法。然后一个类 (Concrete) 将 promise 返回一个与基类具有不同签名的对象——这是一个类型错误。
如果在某些情况下需要引用 IChildThing,可以这样:
internal class Concrete : Base<ChildThing>
{
public override IBaseThing<ChildThing> Thing
{
get { return ChildThing; }
}
public IChildThing ChildThing { get; set; }
}
如果您只有一个 Base,那么您就无法安全地访问 IChildThing。这就是像这样的强类型系统的本质。如果这是一个问题,那么如果您给出一个更具体的示例,我可能会建议如何进行重组以避免该问题。
关于c# - 接口(interface)继承和抽象方法覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20468082/