C#/无法将类型的对象转换为类型

时间:2018-04-30 20:30:55

标签: c# class inheritance polymorphism

我试图创建一个对象。但该程序抛出一个错误: 无法转换类型的对象 这是一个产生我的问题的代码:

public class AnimalBase
{
    public AnimalBase()
    {
        this.ArriveTime = DateTime.Now;
    }
    public DateTime ArriveTime { get; set; }
    public int ageAnimal { get; set; }

    public int poidsAnimal { get; set; }

    public virtual string typeAnimal
    {
        get
        {
            return "AnimalBase";
        }
    }

    public  static  AnimalBase DoSomething(string value)
    {
        AnimalBase animalbase = new AnimalBase();
        animalbase.ArriveTime = DateTime.Now;
        animalbase.ageAnimal = 1;
        animalbase.poidsAnimal = 2;            
        return animalbase;
    }
}
 public class Reptile: AnimalBase
{
    public override string typeAnimal
    {
        get
        {
            return "Reptile";
        }
    }
    public Reptile():base()
    {

    }
}

   class Program
{
    static void Main(string[] args)
    {
        //ERROR
        Reptile rep = (Reptile)AnimalBase.DoSomething("text");

        Console.ReadLine();
    }
}

错误: {“无法将”ConsoleApplication1.AnimalBase“类型的对象强制转换为”ConsoleApplication1.Reptile“。”}

我不知道为什么我有这个问题,在msdn中它说我只需明确指定类型。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

你的问题是AnimalBase.DoSomething正在返回一个具体类型为AnimalBase的对象。

尝试更改它以创建Reptile实例:

AnimalBase animalbase = new Reptile();

此失败的原因是您的继承层次结构。 Reptile 是-a AnimalBase,但AnimalBase不一定是Reptile