私はこれをたくさん検索しましたが、明確な答えはありません (少なくとも私にとっては!)。今、私はこの質問をSOに入れています。他の場所ではより明確な答えを得ることができないと信じているからです。
クラスでプライベート/静的コンストラクターを使用する必要があるのはいつですか?
私は通常の答えにうんざりしているので、これらのコンストラクターを使用するリアルタイムの例と利点/欠点を教えてください。
私はこれをたくさん検索しましたが、明確な答えはありません (少なくとも私にとっては!)。今、私はこの質問をSOに入れています。他の場所ではより明確な答えを得ることができないと信じているからです。
クラスでプライベート/静的コンストラクターを使用する必要があるのはいつですか?
私は通常の答えにうんざりしているので、これらのコンストラクターを使用するリアルタイムの例と利点/欠点を教えてください。
静的コンストラクター:静的メンバーを初期化するために使用されます。
プライベートコンストラクター:クラスを独自のコード内から(通常は静的メソッドで)インスタンス化する場合にのみ使用されます。例えば:
public class Thing
{
static int Number;
static Thing()
{
Number = 42; // This will only be called once, no matter how many instances of the class are created
}
// This method is the only means for external code to get a new Thing
public static Thing GetNewThing()
{
return new Thing();
}
// This constructor can only be called from within the class.
private Thing()
{
}
}
クラスでプライベートコンストラクターを使用する必要があるのはいつですか?
コンストラクターが必要だが、それを世界に公開したくない場合。これは、(検証後に)コンストラクターを呼び出すファクトリメソッドがあるか、そのコンストラクターがctor-chaining(つまりpublic Foo(string) : this() { ...}
)によって呼び出されていることが原因である可能性があります。
さらに、リフレクションコードは、シリアル化やORMライブラリなどのプライベートコンストラクターを使用できる場合が多いことに注意してください。
また、初期のC#コンパイラでは、現在はstatic
クラスになるものを記述しているときに、プライベートコンストラクタを使用することが、作成できないように見せるための唯一の方法でした。
クラスで静的コンストラクターを使用する必要があるのはいつですか?
インスタンスまたは静的メソッドによってその状態にアクセスする前に、静的状態を初期化する必要がある場合。
静的コンストラクターは、クラスの静的メンバーを初期化するために使用され、クラスの最初のインスタンスが作成されたとき、または静的メンバーに初めてアクセスされたときに呼び出されます。
コンストラクターのオーバーロードがある場合はプライベートコンストラクターが使用され、それらの一部は他のコンストラクターによってのみ使用される必要があります