2009年11月7日土曜日

C#の言語仕様のありか

http://msdn.microsoft.com/ja-jp/library/ms228593.aspx
の通り、VisualStudio2008を入れたら一緒に入るみたい、

C:\Program Files\Microsoft Visual Studio 9.0\VC#\Specifications\1041\CSharp Language Specification.doc

を見てみると、おおぅ、C#なんか半歩いく音楽教本みたいだ。日本語でよかった。ページ数は、、、575ページもあるんだ。
とりあえず、ちょっとづつ読むとして、、、下のようなクラス定義があったとして、フィールドの初期化とインスタンスコンストラクタのどっちが先に動くか分かればいいんだけど…

using System.Collections.Specialized;
class cls
{
public cls()
{
this.data.Add(1, "Start");
}
private ListDictionary data = new ListDictionary();
}



2009/11/14追記:
仕様書を見ていてら。
10.11.2 インスタンス変数初期化子
インスタンス コンストラクタにコンストラクタ初期化子が指定されていない場合、または base(...) 形式のコンストラクタ初期化子が指定されている場合は、そのコンストラクタにより、そのクラスで宣言されたインスタンス フィールドの variable-initializer で指定された初期化が暗黙的に実行されます。これは、コンストラクタへのエントリ直後、および直接基本クラスのコンストラクタの暗黙的な呼び出しの前に実行される一連の代入に対応します。変数初期化子は、クラス宣言に出てくる順番どおりに実行されます。

だそうです。
だからいいみたい。

0 件のコメント: