接口指定的属性的多态性

Gre*_*oud 3 c# polymorphism c#-4.0

为什么这不起作用?

 public class ClassOptions {}

 public interface Inode {
    ClassOptions Options {get;}
 }            

public class MyClass : Inode {
  public ClassOptions Options { get; set; }
}           

public class ClassDerivedOptions : ClassOptions {
}

public class MyDerivedClass : Inode {
    public ClassDerivedOptions Options { get; set; } << does not implement INode...
}
Run Code Online (Sandbox Code Playgroud)

[编译器消息告诉我为什么它会中断但我想知道编译器为什么不通过它的原因 - 同样如果有任何解决方法?- 谢谢]

Jus*_*ner 8

它不起作用,因为INode接口显式调用ClassOptions类型的Options属性.C#不支持返回类型协方差(这是你在这种情况下要求的).

对于它的价值,Microsoft Connect上还有一个语言功能请求专门用于返回类型协方差:

需要C#/所有.NET语言中的协变返回类型

如果您查看该页面,他们还会提到常见的解决方法是使用显式接口实现:

public class MyDerivedClass : INode
{
    public ClassDerivedOptions Options { get; set; }
    public ClassOptions INode.Options { get { return Options; } }
}
Run Code Online (Sandbox Code Playgroud)