C#에서는 const와 readonly 키워드 모두 한 번 선언되면 수정할 수 없는 불변 값을 정의하는 데 사용됩니다. 그러나 둘 사이에는 몇 가지 중요한 차이점이 있습니다.
const 수정자는 컴파일 타임에 알려지고 변경되지 않는 상수 값을 선언합니다. 즉, 변경할 수 없습니다. C#에서는 기본 제공 형식만 const로 표시할 수 있습니다. 사용자 정의 유형(예: 클래스, 구조체 등)은 const일 수 없습니다. 또한 클래스 멤버 유형(예: 메서드, 속성, 이벤트)은 상수로 표시될 수 없습니다.
선언 시 상수를 초기화해야 합니다.
class Period{ public const int hours = 12; public const int minutes = 60; }
상수는 비공개, 공개, 보호, 보호 내부 또는 비공개 보호와 같은 가시성 수정자로 표시될 수 있습니다.
상수는 정적 값으로도 작동합니다. 즉, 상수 값은 클래스의 모든 인스턴스와 연결됩니다. static 키워드를 사용하여 명시적으로 표시할 필요는 없습니다. 클래스의 인스턴스 변수를 사용하여 상수에 액세스할 수 없으며 클래스 이름을 사용해야 합니다.
읽기 전용으로 표시된 필드는 선언되거나 생성자에서만 가능합니다. 클래스 인스턴스가 생성되면 읽기 전용 필드를 수정할 수 없습니다.
필드가 값 유형인 경우 읽기 전용으로 표시하면 변경할 수 없습니다. 반면에 읽기 전용 필드가 참조 유형인 경우에도 변수가 참조하는 개체의 데이터를 변경할 수 있습니다. 그러나 새 개체를 가리키도록 참조를 변경할 수는 없습니다.
class Person{ private readonly string _title; private readonly string _skill; public Person(string title, string skill){ _title = title; _skill = skill; } }
읽기 전용 필드는 필드 선언 및 모든 생성자에서 여러 번 할당될 수 있습니다. 또한 사용된 생성자에 따라 다른 값을 가질 수 있습니다.
둘 사이의 중요한 차이점은 한 어셈블리에서 선언된 const 또는 읽기 전용 필드가 다른 어셈블리에서 사용될 때 컴파일된다는 것입니다.
< ul class="list">const 값의 경우 찾기 및 바꾸기와 같습니다. 상수 값은 두 번째 어셈블리의 중간 언어로 "구워집니다". 즉, 상수를 업데이트하면 다시 컴파일할 때까지 두 번째 어셈블리가 여전히 첫 번째 값을 갖게 됩니다.
읽기 전용 값의 경우 메모리 위치에 대한 참조와 같습니다. 값은 두 번째 어셈블리의 중간 언어에 포함되지 않습니다. 즉, 메모리 위치가 업데이트되면 두 번째 어셈블리가 다시 컴파일하지 않고 새 값을 가져옵니다. 읽기 전용 필드를 업데이트한다는 것은 사용자 어셈블리가 아닌 첫 번째 어셈블리만 컴파일해야 함을 의미합니다.
실시간 시연
using System; class Program{ static void Main(){ Console.WriteLine(Period.HOURS); var person = new Person("John", "Programmer"); person.Print(); } } class Period{ public const int HOURS = 12; public const int MINUTES = 60; } class Person{ private readonly string _title; private readonly string _skill; public Person(string title, string skill){ _title = title; _skill = skill; } public void Change(string skill){ // Error: A readonly field cannot be assigned to // this._skill = skill; } public void Print(){ Console.WriteLine($"{_title}: {_skill}"); } }
12 John: Programmer
위 내용은 C#에서 const와 readonly 키워드의 차이점을 설명하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!