プライベート コンストラクター (C# プログラミング ガイド)
プライベート コンストラクターは、特別なインスタンス コンストラクターです。 通常は、静的メンバーだけを含むクラスで使用されます。 クラスに 1 つ以上のプライベート コンストラクターがあり、パブリック コンストラクターがない場合、他のクラス (入れ子になったクラスを除く) はこのクラスのインスタンスを作成できません。 次に例を示します。
class NLog
{
// Private Constructor:
private NLog() { }
public static double e = Math.E; //2.71828...
}
空のコンストラクターを宣言すると、既定コンストラクターの自動生成は行われません。 コンストラクターにアクセス修飾子を指定しない場合でも、コンストラクターは既定でプライベートになります。 しかし、通常は、private 修飾子を明示的に使って、クラスをインスタンス化できないことを明確に示します。
プライベート コンストラクターは、Math クラスなどのようにインスタンス フィールドやメソッドが存在しない場合や、クラスのインスタンスを取得するためにメソッドが呼び出される場合に、クラスのインスタンスが作成されないようにするために使用します。 クラス内のすべてのメソッドが静的な場合は、クラス全体を静的にすることを検討してください。 詳細については、「静的クラスと静的クラス メンバー (C# プログラミング ガイド)」を参照してください。
使用例
プライベート コンストラクターを使用するクラスの例を次に示します。
public class Counter
{
private Counter() { }
public static int currentCount;
public static int IncrementCount()
{
return ++currentCount;
}
}
class TestCounter
{
static void Main()
{
// If you uncomment the following statement, it will generate
// an error because the constructor is inaccessible:
// Counter aCounter = new Counter(); // Error
Counter.currentCount = 100;
Counter.IncrementCount();
Console.WriteLine("New count: {0}", Counter.currentCount);
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
// Output: New count: 101
この例で次のステートメントのコメントを解除すると、保護レベルのためにコンストラクターにアクセスできなくなり、エラーが発生します。
// Counter aCounter = new Counter(); // Error
C# 言語仕様
詳細については、「C# 言語仕様」を参照してください。 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。