gpt4 book ai didi

c# - 接口(interface)继承和抽象方法覆盖

转载 作者:太空宇宙 更新时间:2023-11-03 21:38:49 24 4
gpt4 key购买 nike

假设我们有一个接口(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com