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
{

}

任何人都可以解释为什么会这样吗?内存中发生了什么?

4

1 回答 1

1

您似乎误解了继承。

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

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

于 2012-07-26T15:18:33.030 回答