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ものSonFather. Fatherそのため、両方を変数に安全に割り当てることができます。サブクラスは属性/メソッドを削除することはできず、それらを追加するだけです。そのため、常に機能していると確信しています。

しかし、 のインスタンスがFatherあり、それを変数に割り当てたい場合、そのインスタンスが であり、実際に必要なすべてのプロパティを持っているSonかどうかを確認することはできません。インスタンスには、と互換性のない がSon含まFatherれている可能性もあります。そのため、コンパイラはそれらを暗黙的に変換できませんが、プログラマーは明示的に変換できます。DaughterSon

于 2012-07-26T15:18:33.030 に答える