使用派生类型覆盖基类类型

时间:2018-02-21 11:19:17

标签: c# .net generics types

我有一个名为RottenFruit的基类,一个名为RottenApple的类,它继承自它。

现在我希望RottenFruit类继承一个名为Fruit的类,它是Apple类的基类,因此我可以在每个RottenFruit对象下添加一个Fruit对象,使其在水果类型方面具有通用性。

abstract class RottenFruits : Fruit
{
    public virtual Fruit fruit { get; set; }; 
    bool isRotten { get; set; }
}

class RottenApple : RottenFruits
{
    public override Apple fruit { get; set; };
}

如果我试试这个,我在派生类中得到一个错误

  

类型必须是Fruit才能匹配被覆盖的成员RottenFruits.fruit   当Fruit是Apple的基类时,为什么不匹配类型?

修改 假设我有多个RottenFruits:RottenBanana,RottenPear等,我想将它们全部收集在一个数组中。如果我使用泛型类型

,RottenFruits将期望Fruit的类型参数
RottenFruits[] fruits = new { 
    new RottenApple(){fruit = new Apple()}, 
    new RottenBanana(){fruit = new Banana() 
}

1 个答案:

答案 0 :(得分:4)

你无法按照自己的方式去做。我认为你能做的就是在这里使用泛型:

class Fruit
{
}
class abstract RottenFruits<T> : Fruit where T : class
{
    public T fruit; 
    bool isRotten { get; set; }
}

现在你可以做到:

class RottenApple : RottenFruits<Apple>
{

}