전용 생성자는 특수 인스턴스 생성자입니다. 이것은 정적 멤버만 포함하는 클래스에서 일반적으로 사용됩니다. 클래스에 전용 생성자만 한 개 이상 있고 공용 생성자는 없을 경우 중첩 클래스를 제외한 다른 클래스는 이 클래스의 인스턴스를 만들 수 없습니다. 예를 들면 다음과 같습니다.
class NLog
{
// Private Constructor:
private NLog() {}
public static double e = 2.71828;
}
빈 생성자를 선언하면 기본 생성자가 자동으로 생성되지 않습니다. 액세스 한정자를 생성자와 함께 사용하지 않을 경우에는 기본적으로 전용 생성자가 됩니다. 그러나, 클래스가 인스턴스화될 수 없음을 분명히 하려면 대개private한정자를 명시적으로 사용합니다.
전용 생성자는 Math 클래스처럼 인스턴스 필드나 메서드가 없을 경우 또는 클래스의 인스턴스를 가져오기 위해 메서드가 호출되는 경우에 클래스 생성을 방지하는 데 유용합니다.
예제
다음은 전용 생성자를 사용하는 클래스의 예제입니다.
// PrivateCtor1.cs
using System;
public class MyClass
{
private MyClass() {}
public static int counter;
public static int IncrementCounter()
{
return ++counter;
}
}
class MainClass
{
static void Main()
{
// If you uncomment the following statement, it will generate
// an error because the constructor is inaccessible:
// MyClass myObject = new MyClass(); // Error
MyClass.counter = 100;
MyClass.IncrementCounter();
Console.WriteLine("New count: {0}", MyClass.counter);
}
}
출력
New count: 101
예제에서 다음 문을 주석으로 처리하지 않으면 보호 수준 때문에 이 생성자에 액세스할 수 없어서 오류가 발생합니다.
// MyClass myObject = new MyClass(); // error