C#에서 const와 readonly 키워드의 차이점을 설명하세요.

WBOY
풀어 주다: 2023-09-15 16:33:02
앞으로
1084명이 탐색했습니다.

C#에서 const와 readonly 키워드의 차이점을 설명하세요.

C#에서는 const와 readonly 키워드 모두 한 번 선언되면 수정할 수 없는 불변 값을 정의하는 데 사용됩니다. 그러나 둘 사이에는 몇 가지 중요한 차이점이 있습니다.

const

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}");
       }
    }
    로그인 후 복사

    Output

    12
    John: Programmer
    로그인 후 복사

    위 내용은 C#에서 const와 readonly 키워드의 차이점을 설명하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    원천:tutorialspoint.com
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿