派生类不能引用父类

时间:2012-07-26 15:06:44

标签: c#-3.0

class Program
{
    static void Main(string[] args)
    {

        Father objFather = new Son(); //Ok compiles

        Son objSon1 =  new Father(); //Comile time error : Cannot implicitly convert type

        Son objSon = (Son)new Father();  //Run time error
        Console.ReadLine();
    }
}

class Father
{
    public void Read()
    {

    }

}

class Daughter:Father
{

}

class Son:Father
{

}

任何人都能解释为什么会这样吗?记忆中发生了什么?

1 个答案:

答案 0 :(得分:1)

你似乎误解了继承。

每个Daughter和每个Son都是Father。这就是为什么你可以安全地将它们分配给Father变量的原因。子类不能删除属性/方法只添加它们,这就是为什么它确定它始终有效。

但是如果你有一个Father的实例并希望将其分配给Son变量,那么你无法确定该实例是Son并且实际上拥有所有需要的属性。 Father实例也可能包含与Daughter不兼容的Son。这就是为什么编译器不能隐式转换它们,但作为程序员你可以明确地做它。