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必须是基本元素的List,"以匹配覆盖的成员"A.Items。我怎样才能做到呢?
您最初尝试完成的是不可能的- . net不支持方法重载的co(contra)方差。属性也是一样,因为属性就是一对方法。
但是你可以让你的类泛型:
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;
}
}
}