型コンストラクターのデザイン
型の静的データを初期化する場合、型コンストラクターを使用します。 型コンストラクターは、型のインスタンスが作成される前に、共通言語ランタイム (CLR: Common Language Runtime) によって呼び出されます。 型コンストラクターは static (Visual Basic では Shared) であり、パラメーターを受け取りません。
推奨される手順で静的コンストラクターを使用するには、次のガイドラインに従います。
型コンストラクターはプライベートにします。
型コンストラクター (クラス コンストラクターまたは静的コンストラクターとも呼ばれます) は、型を初期化するために使用します。 型コンストラクターは、型の最初のインスタンスが作成されるか、型の静的メンバーが呼び出される前に、CLR によって呼び出されます。 型コンストラクターがプライベートでない場合は、CLR 以外のコードによって呼び出されることがあります。 その結果、コンストラクター内で実行される演算によっては、予期しない動作が発生する可能性があります。
型コンストラクターから例外をスローしないようにします。
型コンストラクターが例外をスローした場合、例外がスローされたアプリケーション ドメイン内でその型を使用できません。
静的コンストラクターを明示的に使用する代わりに、静的フィールドをインラインで初期化することを検討します。明示的に定義された静的コンストラクターを持たない型のパフォーマンスは、CLR によって最適化されるからです。
最適化できないデザインを次のコード例に示します。
Public Class BadStaticExample
Shared runId as Guid
Shared Sub New()
runId = Guid.NewGuid()
End Sub
' Other members...
End Class
public class BadStaticExample
{
static Guid runId;
static BadStaticExample()
{
runId = Guid.NewGuid();
}
// Other members...
}
public ref class BadStaticExample
{
static Guid runId;
static BadStaticExample()
{
runId = Guid::NewGuid();
}
// Other members...
};
次のコード例は最適化できます。
Public Class GoodStaticExample
Shared runId as Guid = Guid.NewGuid()
' Other members...
End Class
public class GoodStaticExample
{
static Guid runId = Guid.NewGuid();
// Other members...
}
public ref class GoodStaticExample
{
static Guid runId = Guid::NewGuid();
// Other members...
};
Portions Copyright 2005 Microsoft Corporation. All rights reserved.
Portions Copyright Addison-Wesley Corporation. All rights reserved.
設計ガイドラインの詳細についてを参照してください、「フレームワークの設計ガイドライン。規則、慣用句、および再利用可能なパターン。ネット ライブラリ」本クシシュトフ Cwalina、ブラッド エイブラムス、アスキー、2005 年発表しました。