13. Staticメンバを適切に初期化すること¶
- staticメンバ変数は型のインスタンスが1つ以上作成されるよりも前に初期化されるべき。(どういう意味?)
newする前にstatic member=5みたいに設定する。
- CLRは、「型がアプリケーション空間(AppDomain)において初めてアクセスする」よりも前の時点で、その型のstatic
コンストラクタを自動的に呼び出す。staticコンストラクタで例外が出た場合、型の初期化に失敗する(Appdomainで呼び出さる前に)。その派生型によっても問題が引き起こされる。AppDomainがアンロードされない限り型を初期化されない状態になる。
- staticメンバの初期化はオブジェクト初期化ではなく、staticコンストラクタで行うべき。
staticメンバに対してオブジェクト初期化子を使用する場合、発生した例外をクラス自身で処理できない。 staticコンストラクタの場合はクラス内での例外処理が可能.
static MySingleton(){ try { theOneAndOnly = new MySingleton(); } catch{ } }
- staticコンストラクタ:ほかのメソッドや変数、プロパティに対するアクセスよりも前に実行される。これによりsingleton
patternの強制などができる。
- static変数初期化子(=new
をメンバ定義時に行う)、staticコンストラクタはクラス内のstaticメンバを初期化する場合に最適な方法。