接口继承和新关键字

Cha*_*aos 10 c# interface

我想要:

public interface IBase
{
    MyObject Property1 { get; set; }
}

public interface IBaseSub<T> : IBase
{
    new T Property1 { get; set; }
}

public class MyClass : IBaseSub<YourObject>
{
    public YourObject Property1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但这不编译.它给出了错误:

//This class must implement the interface member IBase.Property1
Run Code Online (Sandbox Code Playgroud)

任何人都可以对此有所了解吗?我认为它应该工作..

谢谢

Rex*_*x M 14

IBaseSub<T> 需要 IBase.我说"需要",因为它更准确地反映了实际含义,而不是说它"继承" IBase,这意味着覆盖和其他根本不会发生接口的事情.一类器物IBaseSub<T>实际上可以说是同时实现,就像这样:

public class MyClass : IBase, IBaseSub<YourObject>
Run Code Online (Sandbox Code Playgroud)

回到我所说的关于继承的内容 - 接口没有这样的东西,这意味着只是因为两个接口都有一个具有相同名称的属性,派生的接口不会覆盖或隐藏基础接口.这意味着您的类现在必须实际上实现具有相同名称的两个属性以实现两个合同.您可以通过显式实现来执行此操作:

public class MyClass : IBase, IBaseSub<YourObject>
{
    public YourObject Property1 { get; set; }
    MyObject IBase.Property1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

  • 已经有一段时间..但我现在已经将其标记为答案.对不起= / (3认同)