C#에서는 상수에는 컴파일 시에 상수값이 결정되는 상수 멤버 필드와 런타임에 결정되는 읽기 전용을 제공하고 있습니다.
상수 멤버 필드는 const 키워드와 형식, 필드 이름과 초기값을 대입하면 됩니다. 이처럼 상수 멤버 필드를 캡슐화하면 이는 개체의 멤버가 아닌 묵시적으로 정적 멤버가 되므로 명시적으로 static 키워드를 사용할 수 없습니다.
읽기 전용을 캡슐화할 때는 readonly 키워드와 형식, 이름을 선언하면 됩니다. 읽기 전용은 상수 멤버 필드와 다르게 묵시적으로 정적 멤버가 아니므로 static 키워드를 명시해야 정적 멤버가 됩니다. 그리고 읽기 전용은 생성자에서 초기화할 수 있습니다.
▶ 읽기 전용 멤버를 생성자에서 초기화
class Man { readonly int num; public Man(int num) { this.num = num; } }
상수 멤버 필드는 컴파일 시에 상수값이 결정되므로 string 형식을 제외한 참조 형식을 사용하려면 상수값을 null로 초기화해야 합니다. 따라서 동적으로 생성한 개체를 상수 멤버로 두려면 읽기 전용을 사용하여야 합니다.