c# - 使用更指定的返回类型(协方差)覆盖抽象属性

标签 c# c#-4.0 overriding abstract covariance

class Base {}

abstract class A
{
    abstract public List<Base> Items { get; set; }
}

class Derived : Base {}

class B : A
{ 
    private List<Derived> items;
    public override List<Derived> Items
    {
           get
           {
               return items;
           }
           set
           {
            items = value;
           }
      }
  }

编译器表示 B.Items 必须是 Base 元素列表“以匹配重写的成员”A.Items。我怎样才能做到这一点?

最佳答案

你最初试图完成的事情是不可能的 - .NET does not support co(contra)variance for method overload 。属性也是如此,因为属性就是 the pair of methods .

但是您可以使您的类变得通用:

class Base {}

abstract class A<T> 
    where T : Base
{
    abstract public List<T> Items { get; set; }
}

class Derived : Base {}

class B : A<Derived>
{ 
    private List<Derived> items;
    public override List<Derived> Items
    {
           get
           {
               return items;
           }
           set
           {
            items = value;
           }
      }
  }

关于c# - 使用更指定的返回类型(协方差)覆盖抽象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24561023/

相关文章:

jquery - Kendo UI网格/内联编辑中 "productService"是什么意思

excel - 在 Selenium C# 中使用 Excel 数据读取器时,似乎没有选项可以将我的第一行设置为列名称

c# - 如何让你的对象在比较时充当另一种类型?

c++ - 如何为可覆盖方法提供默认实现?

css - 在 Joomla 中用 .less 覆盖 CSS

java - 覆盖错误Java,程序不会只读取两种方法

c# - C#、C 和 OCaml 中的模运算

c# - WPF 中 Datacontext 和 ItemSsource 的区别

c# - 迭代地将值关联到 C# 中的变量,就像 python 在 [2, 1, 3] 中为 (red, green, blue) 所做的那样

c# - 提高数据表性能