7

一般的にC#では、コンストラクターの概念は、基本クラスのconsが最初に実行される必要があるのですが、派生クラスの静的コンストラクターが呼び出されてから基本クラスのconsが呼び出されるのはなぜですか。誰か説明してくれませんか?:(

4

3 に答える 3

8

静的コンストラクターはクラス自体を初期化します。つまり、他の静的メンバーにアクセスする前、およびクラスのインスタンスを作成する前に呼び出す必要があります。

クラス階層内の静的コンストラクターへの呼び出しの順序については、未定義と見なす必要があります。静的コンストラクターに関するMSDNページから:

ユーザーは、静的コンストラクターがプログラムでいつ実行されるかを制御できません。

于 2012-06-27T19:31:50.347 に答える
7

それが静的コンストラクターの要点です。継承とは関係ありません。

MSDNを引用するには

最初のインスタンスが作成される前、または静的メンバーが参照される前に、クラスを初期化するために静的コンストラクターが自動的に呼び出されます。

それらの本体を宣言することはできますが、それらがいつ呼び出されるかについて心配する必要はありません (また、フレームワークは、手元にあるクラスのインスタンスが作成される前に実行されることを除いて、その点に関して何の保証も与えません)

編集

ああ、知っておくべきことが他にもあります。それは、明白かもしれませんが、ジェネリックに関係しています。

次のスニペットを検討してください。

class Foo<T> {
    static Foo() {
        Console.WriteLine("Danger, Will Robinson!");
    }
}

Tここでは、当然のことながら、静的コンストラクターが実行されます。

typeof(Foo<Bar>) != typeof(Foo<Baz>)
于 2012-06-27T19:32:08.493 に答える