다음을 통해 공유


전용 생성자(C# 프로그래밍 가이드)

업데이트: 2007년 11월

전용 생성자는 특수 인스턴스 생성자입니다. 이것은 정적 멤버만 포함하는 클래스에서 일반적으로 사용됩니다. 클래스에 전용 생성자만 한 개 이상 있고 공용 생성자는 없을 경우 중첩 클래스를 제외한 다른 클래스는 이 클래스의 인스턴스를 만들 수 없습니다. 예를 들면 다음과 같습니다.

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# 언어 사양에서 다음 단원을 참조하십시오.

  • 10.11.5 전용 생성자

  • 10.1.1.3 정적 클래스

참고 항목

개념

C# 프로그래밍 가이드

참조

클래스 및 구조체(C# 프로그래밍 가이드)

생성자(C# 프로그래밍 가이드)

소멸자(C# 프로그래밍 가이드)

private(C# 참조)

public(C# 참조)