S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

スタティックイニシャライザとか静的コンストラクタとか

かなり以前に、元上司殿からのメールでスタティックイニシャライザの存在を知り、それを使う時がきた!
但し、C#でw

Java

staticってクラスローダにクラスがロードされたタイミングって思ってたけど、どうも違うらしい。
「Classオブジェクトを生成済み→staticイニシャライザを実行済み」ではない - R42日記
Classクラスのインスタンスができることとクラスローダにクラスがロードされるのは意味が違うってことか。
クラスローダにクラスがロードされるってのは、実際のそのクラスを誰かが参照する(staticフィールド/メソッドの参照なりコンストラクタの呼び出しなり)ってことか。
もしくは、staticの初期化ってタイミングがそれに相当するか。

public class StaticSample {

  static {
    // ここに書いたコードが、
    // クラスがクラスローダにロードされたタイミングで、
  // 実行されると思ったけど、
    // 実際はstaticフィールドなど、staticな定義が初期化されたタイミングで
    // 実行されるらしい。
    // スタティックイニシャライザもstaticな定義の一部という認識。
  }

  public void objectMethod() {
    // 通常のメソッド
  }

}

C#

これをC#では?.NETでは?静的コンストラクタと呼ぶらしい(なんか違和感あるけどw)。
MSDN > 静的コンストラクタ (C#)

public class StaticSample {

  static StaticSample()
  {
     // タイミング的には大体Javaと同じハズw
  }

  public void objectMethod()
  {
    // 通常のメソッド
  }

}