【发布时间】:2021-02-24 22:22:43
【问题描述】:
为什么这不起作用?编译器应该足够聪明,知道 InterfaceB 需要 InterfaceA,因此必须兼容。
public interface InterfaceA
{ }
public interface InterfaceB : InterfaceA
{ }
public abstract class DerivedClass : BaseClass
{
protected override InterfaceB ItemService { get; set; } // Error, needs to be InterfaceA
}
public abstract class BaseClass
{
protected virtual InterfaceA ItemService { get; set; }
}
这是为什么呢?
【问题讨论】:
-
您不能更改合同
-
这也没有意义......就像
BaseClass derived = new DerivedClass();一样,你可以分配不是InterfaceB的东西,比如derived.ItemService= instanceOfImplementationOfInterfaceAAndNotInterfaceB; -
通过基类,您可以将任何接口A分配给可能未实现接口B的“ItemService”.....
-
自 2009 年以来答案没有改变 - stackoverflow.com/a/1048929/477420... 正如@Selvin 指出的那样,问题中显示的示例没有意义 - 无法更改 get 和 set 的类型并支持差异(共同或反对)。您可能有理由期望它与 either get 或 set... 一起使用