C#은 컴파일타임 상수와 런타임 상수 두 유형의 상수를 가진다.

이 둘은 서로 다르게 동작하기 때문에 적절하지 않은 상수 타입을 사용하면 상응하는 대가가 따른다.

컴파일타임 상수보다는 런타임 상수를 사용하라.

컴파일타임 상수가 약간 더 빠르긴 하지만 런타임 상수에 비해 유연성이 상당히 떨어진다.

컴파일타임 상수는 성능이 매우 중요하고

상수의 값이 절대로 바뀌지 않는 경우에만 제한적으로 사용하는것이 좋다.

런타임 상수는 readonly 키워드를 사용하여 선언하고, 컴파일타임 상수는 const 키워드를 사용한다.

// 컴파일타임 상수:
public const int Millennium = 2000;

// 런타임 상수:
public static readonly int ThisYear = 2004;

컴파일타임 상수는 매서드 내부에서도 선언할 수 있지만,

런타임 상수는 메서드 내에서는 선언할수 없다.

런타임 상수와 컴파일타임 상수가 서로 다르게 동작하는 이유는 값에 접근하는 방법이 서로 다르기

때문이다. 컴파일타임 상수는 컴파일타임에 변수가 값으로 대체된다.

if (myDateTime.Year == Millennium)

이 코드는 다음 코드와 정확히 동일한 IL(Intermediate Language)코드로 컴파일 된다.