C#抽象类:不能将类型type1隐式转换为type2

时间:2013-11-18 11:44:24

标签: c# class interface abstract

我有一个接口,3个实现接口的类,其中一个类可能是抽象的。

iAnimal // Interface
Animal // Abstract Class (Implements iAnimal)
Fox // Class (Implements iAnimal)
Deer // Class (Implements iAnimal)

Animal animal; // declare an animal
Switch (type)
{
     Case "Fox":
         animal = new Fox();
         break;
     Case "Deer":
         animal = new Deer();
         break;
}

animal.eat();

我只想在动物身上调用eat函数,这是switch语句的结果。

然而我收到错误:

无法将type1类型隐式转换为type2。

上述逻辑有什么问题吗?

感谢。

2 个答案:

答案 0 :(得分:5)

FoxDeer应继承自Animal抽象类,以使您的代码正常工作。

即:

public class Deer : Animal
{
     //code
}


public class Fox : Animal
{
     //code
}

答案 1 :(得分:2)

您可以执行以下操作之一:

IAnimal animal; // Notice that it's an IAnimal now
Switch (type)
{
     Case "Fox":
         animal = new Fox();
         break;
     Case "Deer":
         animal = new Deer();
         break;
}

animal.eat();

OR

Deer类创建FoxAnimal类(在这种情况下,您发布的代码将是相同的)

编辑:

这是根据您发布的代码

的类层次结构
        IAnimal
           |
  -------------------
  |        |        |
Animal    Fox     Deer

您可以将派生类型的对象强制转换为更通用的类型(父级),因此Animal - > IAnimalFox - >允许IAnimal等 但它不适用于像Fox - >这样的东西。 Animal,因为Animal不是福克斯的父母