0
namespace contest
{
    class Program
    {
        static void Main(string[] args)
        {
            B b = new B();
        }
    }

    class A {
        public A() {
            k();
        }
        private void k() {
            Console.WriteLine(base.GetType().Name);
        }        
    }

    class B : A {

    }
}

誰かが「Object」ではなく「B」を出力する理由を教えてもらえますか?base.GetType()はAの親オブジェクト、つまりルートオブジェクトを取得しますか?

どうもありがとう

4

3 に答える 3

3

それは

base.GetType()

GetType()オーバーライドしていませんが、「親クラスのメソッドを呼び出す」という意味です。したがって、常にクラスを返すbase.GetType()だけでなくthis.GetType()B

于 2012-06-07T02:49:56.937 に答える
0

BはAを実装/継承します。Bb=newB()を初期化すると、aのガットが使用されるため、Bのタイプが返されます。Ab = new B();を使用してみてください。これはAを返すはずです。メソッドをオーバーライドし、Aを抽象として定義する必要があります。

于 2012-06-07T02:55:42.750 に答える
0

GetTypeで定義されてSystem.Objectおり、仮想ではありません。メタデータからオブジェクトのランタイムタイプを提供します。したがって、(コンストラクターまたは仮想メソッドの)どこで呼び出すか、または常に同じメソッドを使用するbaseか、呼び出すかは関係ありません。this基になる型を取得するNullable型の場合を除いて、常にランタイム型を取得します。私の推測では、これはnullablesの特別なボクシングの振る舞いによるものだと思います。null許容型の識別については、こちらをご覧ください。

于 2012-06-07T03:05:39.353 に答える