我有一个名为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()
}
答案 0 :(得分:4)
你无法按照自己的方式去做。我认为你能做的就是在这里使用泛型:
class Fruit
{
}
class abstract RottenFruits<T> : Fruit where T : class
{
public T fruit;
bool isRotten { get; set; }
}
现在你可以做到:
class RottenApple : RottenFruits<Apple>
{
}