3

簡単な構文を使用して値を直接代入して派生クラス フィールドを初期化する場合、コンパイラは、最初に派生クラス フィールドを初期化し、次に base .ctor を呼び出す IL コードを生成します。ベース .ctor フィールドを呼び出さず、派生クラス フィールドを初期化しない理由。基本クラスのフィールドに依存するフィールドがある場合はどうなりますか?

ここにコード サンプルを掲載したいと思いますが、携帯電話からこの質問を投稿しています。

4

2 に答える 2

3

コンストラクター内で仮想メソッドやイニシャライザーが呼び出された場合に対応する必要があるからだと思います。

于 2012-04-21T00:47:07.327 に答える
2

Eric Lippert は、彼のブログで 2 部構成のシリーズを公開しています。

http://blogs.msdn.com/b/ericlippert/archive/2008/02/15/why-do-initializers-run-in-the-opposite-order-as-constructors-part-one.aspx

あなたの納得のためにここに言及するだけです。お役に立てれば。

Calling methods on derived types from constructors is dirty pool, but it is not illegal. 

また、完全に構築されていないオブジェクトをグローバル状態に詰め込むことは危険ですが、違法ではありません。

于 2012-04-21T03:57:02.587 に答える