今日、同僚と話し合い、次の点を結論付けました。すべてが正しい場合、または何らかの修正が必要な場合は、光を投げてください。
1.-3。あなたはそれがいつ起こるかを正確に知ることができないので、あなたはそれに依存することはできません。静的コンストラクターは、呼び出されたときに何が起こるかを少し制御します。
public class UtilityClass
{
//
// Resources
//
// r1 will be initialized by the static constructor
static Resource1 r1 = null;
// r2 will be initialized first, as static constructors are
// invoked after the static variables are initialized
static Resource2 r2 = new Resource2();
static UtilityClass()
{
r1 = new Resource1();
}
static void f1(){}
static void f2(){}
}
4.静的コンストラクターが遅い
静的コンストラクターの実行の正確なタイミングは実装に依存しますが、次の規則に従います。
あなたのポイントはすべて正しいです。
静的コンストラクターを避けるべき理由は、静的コンストラクターが呼び出されたことを確認するために、クラスのメソッドが呼び出されるすべての場所にコンパイラーがコードを注入するためです。これはパフォーマンスに悪影響を及ぼします。
できることは、デフォルト(または他の非静的)コンストラクターが呼び出されたときにダミー値が割り当てられるプライベート静的フィールドをクラスに持つことです。これにより、オブジェクト作成時にすべての静的フィールドが初期化されます。