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メンバを初期化する場合に最適な方法。