상수(C# 프로그래밍 가이드)

상수는 컴파일 시간에 알려진 변경할 수 없는 값입니다. 프로그램 수명 동안 변경하지 마세요. 상수는 const 한정자로 선언됩니다. C# 기본 제공 형식const로 선언할 수 있습니다. String 이외의 참조 형식 상수는 null 값으로만 초기화될 수 있습니다. 클래스, 구조체 및 배열을 비롯한 사용자 정의 형식은 const가 될 수 없습니다. readonly 한정자를 사용하여 런타임에 한 번 초기화되고(예: 생성자에서) 그때부터는 변경할 수 없는 클래스, 구조체 또는 배열을 만듭니다.

C#에서는 const 메서드, 속성 또는 이벤트를 지원하지 않습니다.

열거형 형식을 사용하여 정수 계열 기본 제공 형식(예: int, uint, long 등)에 대한 명명된 상수를 정의할 수 있습니다. 자세한 내용은 enum을 참조하세요.

상수는 선언될 때 초기화되어야 합니다. 예시:

class Calendar1
{
    public const int Months = 12;
}

이 예제에서 Months 상수는 항상 12이고 클래스 자체에 의해서도 변경될 수 없습니다. 실제로 컴파일러는 C# 소스 코드에서 상수 식별자를 발견할 경우(예: Months) 리터럴 값을 직접 컴파일러에서 생성하는 IL(중간 언어) 코드로 대체합니다. 런타임에 상수와 연결된 변수 주소가 없으므로 const 필드는 참조를 통해 전달될 수 없고 식에 l-value로 표시될 수 없습니다.

참고 항목

DLL과 같이 다른 코드에 정의된 상수 값을 참조할 경우 주의하세요. DLL의 새 버전에서 상수의 새 값을 정의할 경우 프로그램은 새 버전에 대해 다시 컴파일될 때까지 이전 리터럴 값을 포함합니다.

다음과 같이 같은 형식의 여러 상수를 동시에 선언할 수 있습니다.

class Calendar2
{
    public const int Months = 12, Weeks = 52, Days = 365;
}

상수를 초기화하는 데 사용되는 식은 순환 참조를 만들지 않을 경우 다른 상수를 참조할 수 있습니다. 예시:

class Calendar3
{
    public const int Months = 12;
    public const int Weeks = 52;
    public const int Days = 365;

    public const double DaysPerWeek = (double) Days / (double) Weeks;
    public const double DaysPerMonth = (double) Days / (double) Months;
}

상수는 public, private, protected, internal, protected internal 또는 private protected로 표시될 수 있습니다. 이러한 액세스 한정자는 클래스의 사용자가 상수에 액세스하는 방법을 정의합니다. 자세한 내용은 액세스 한정자를 참조하세요.

형식의 모든 인스턴스에 대한 상수 값이 같으므로 상수가 static 필드인 것처럼 상수에 액세스합니다. 상수를 선언하는 데 static 키워드를 사용하지 않습니다. 상수를 정의하는 클래스에 포함되지 않은 식은 상수에 액세스할 때 클래스 이름, 마침표 및 상수 이름을 사용해야 합니다. 예시:

int birthstones = Calendar.Months;

C# 언어 사양

자세한 내용은 C# 언어 사양을 참조하세요. 언어 사양은 C# 구문 및 사용법에 대 한 신뢰할 수 있는 소스 됩니다.

참고 항목