Const 와 static readonly 는 개체 이름 대신 클래스 이름을 통해 액세스하는 것, 프로그램에서 읽기 전용 등을 잘 알고 있습니다. 대부분의 경우 혼용할 수 있습니다.
두 특성의 차이점은 const 의 값이 컴파일 중에 결정되므로 선언 시 상수 표현식을 통해서만 값을 지정할 수 있다는 것입니다. Static readonly 는 런타임에 값을 계산하므로 정적 생성자를 통해 값을 지정할 수도 있습니다.
이러한 본질적인 차이점을 이해하면 다음 문에서 static readonly 와 const 를 교환할 수 있는지 쉽게 알 수 있습니다.
1. static readonly myclass myins = new myclass ();
2. static readonly myclass myins = null;
3. static readonly a = b * 20;
Static readonly B = 10;;
4. static readonlyint [] constintarray = new int [] {1,2,3};
5. void SomeFunction()
{
Constinta = 10;
...
}
1: const 로 바꿀 수 없습니다. New 연산자는 생성자를 실행해야 하므로 컴파일 중에
를 결정할 수 없습니다2: const 로 바꿀 수 있습니다. 또한 Reference 유형의 상수 (String 제외) 는 Null 일 수 있습니다.
3: const 로 바꿀 수 있습니다. 우리는 컴파일 중에 A 가 200 이라고 분명히 말할 수 있다.
4: const 로 바꿀 수 없습니다. 이치는 1 과 같다. 1, 2, 3 의 배열은 확실히 상수인 것 같다.
5: readonly 로 바꿀 수 없습니다. readonly 는 클래스의 field 를 수식하는 데만 사용할 수 있습니다. 로컬 변수나 property 와 같은 다른 클래스 멤버는 수식할 수 없습니다.