かなり以前に、元上司殿からのメールでスタティックイニシャライザの存在を知り、それを使う時がきた!
但し、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() { // 通常のメソッド } }