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

업데이트: 2007년 11월

상수는 컴파일 타임에 인식되고 프로그램 수명 기간 중 변경할 수 없는 불변 값입니다. 상수는 const 한정자를 사용하여 선언합니다. C# 기본 제공 형식(System.Object 제외)만 const로 선언할 수 있습니다. 기본 제공 형식의 목록을 보려면 기본 제공 형식 표(C# 참조)를 참조하십시오. 클래스, 구조체, 배열을 비롯한 사용자 정의 형식은 const가 될 수 없습니다. 런타임에 생성자 내부 등에서 한 번 초기화되고 그 이후로는 변경할 수 없는 클래스, 구조체 또는 배열을 만들려면 readonly 한정자를 사용하십시오.

C#에서는 const 메서드, 속성 또는 이벤트를 사용할 수 없습니다.

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

상수를 선언할 때 이를 초기화해야 합니다. 예를 들면 다음과 같습니다.

class Calendar1
{
    public const int months = 12;
}

이 예제에서 상수 months는 항상 12입니다. 이 값은 클래스 자체에서도 변경할 수 없습니다. 컴파일러는 C# 소스 코드에서 상수 식별자(예: months)를 만나면 이 리터럴 값을 직접 컴파일러에서 생성하는 IL(Intermediate Language) 코드로 바꿉니다. 런타임에 상수에 연결된 변수 주소가 없으므로 const 필드를 참조로 전달하거나 식의 l-value로 사용할 수 없습니다.

참고:

DLL과 같은 다른 코드에 정의된 상수 값을 참조할 때는 매우 주의해야 합니다. DLL 새 버전에서 해당 상수에 대해 새로운 값을 정의하는 경우 사용자 프로그램에서는 새 버전을 사용하여 다시 컴파일하기 전까지 이전 리터럴 값을 보유하게 됩니다.

동일한 형식의 상수 여러 개를 동시에 선언할 수 있습니다. 예를 들면 다음과 같습니다.

class Calendar2
{
    const int months = 12, weeks = 52, days = 365;
}

순환 참조 문제가 발생하지 않는 한 상수를 초기화하는 데 사용되는 식에서 다른 상수를 참조할 수 있습니다. 예를 들면 다음과 같습니다.

class Calendar3
{
    const int months = 12;
    const int weeks = 52;
    const int days = 365;

    const double daysPerWeek = (double) days / (double) weeks;
    const double daysPerMonth = (double) days / (double) months;
}

상수는 public, private, protected, internal 또는 protectedinternal로 표시할 수 있습니다. 이러한 액세스 한정자는 클래스 사용자가 상수에 액세스하는 방식을 정의합니다. 자세한 내용은 액세스 한정자(C# 프로그래밍 가이드)를 참조하십시오.

상수의 값은 해당 형식의 모든 인스턴스에서 동일하므로 상수는 static 필드처럼 액세스됩니다. 상수는 static 키워드를 사용하여 선언하지 않습니다. 상수를 정의하는 클래스에 포함되지 않은 식에서 상수에 액세스하려면 클래스 이름, 마침표 및 상수 이름을 사용해야 합니다. 예를 들면 다음과 같습니다.

int birthstones = Calendar.months;

C# 언어 사양

자세한 내용은 C# 언어 사양에서 다음 단원을 참조하십시오.

  • 10.4 상수

참고 항목

개념

C# 프로그래밍 가이드

참조

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

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

형식(C# 프로그래밍 가이드)

readonly(C# 참조)

기타 리소스

Immutability in C# Part One: Kinds of Immutability