다음을 통해 공유


속성 선언과 관련된 오류 및 경고

속성 선언과 관련된 다음 오류가 발생할 수 있습니다.

  • CS0200: 속성 또는 인덱서 'property'를 할당할 수 없습니다. 읽기 전용입니다.
  • CS0545: 'function': 'property'에 재정의 가능한 get 접근자가 없으므로 재정의할 수 없습니다.
  • CS0571: 'function': 명시적으로 연산자 또는 접근자를 호출할 수 없습니다.
  • CS0840: '속성 이름'은 추상 또는 extern으로 표시되지 않으므로 본문을 선언해야 합니다. 자동으로 구현된 속성은 get 및 set 접근자를 모두 정의해야 합니다.
  • CS1014: get 또는 set 접근자가 필요합니다.
  • CS1043: { 또는 ; 예상
  • CS8050: 자동 구현 속성 또는 'field' 키워드를 사용하는 속성만 이니셜라이저를 사용할 수 있습니다.
  • CS8051: 자동 구현 속성에는 get 접근자가 있어야 합니다.
  • CS8053: 인터페이스의 인스턴스 속성에는 이니셜라이저가 있을 수 없습니다.
  • CS8145: 자동 구현 속성은 참조로 반환할 수 없습니다.
  • CS8147: 참조로 반환되는 속성은 접근자를 설정할 수 없습니다.
  • CS8341: 읽기 전용 구조체의 자동 구현 인스턴스 속성은 읽기 전용이어야 합니다.
  • CS8657: 정적 멤버를 '읽기 전용'으로 표시할 수 없습니다.
  • CS8658: 자동 구현된 'set' 접근자를 '읽기 전용'으로 설정할 수 없습니다.
  • CS8659: 자동 구현 속성에는 'set' 접근자가 있으므로 'readonly'로 표시할 수 없습니다.
  • CS8660: 속성과 해당 접근자 모두에서 'readonly' 한정자를 지정할 수 없습니다.
  • CS8661: 속성의 두 접근자 모두에 'readonly' 한정자를 지정할 수 없습니다.
  • CS8664: 속성에 get 및 set가 모두 있는 경우에만 접근자에서 'readonly'를 사용할 수 있습니다.
  • CS9029: 형식 및 별칭의 이름은 'required'로 지정할 수 없습니다.
  • CS9030: 필수 멤버를 재정의하므로 해당 멤버는 필수로 지정되어야 합니다.
  • CS9031: 파생 멤버에서 필요한 멤버를 숨길 수 없습니다.
  • CS9032: 필요한 멤버는 포함 형식보다 덜 표시되거나 setter가 덜 표시될 수 없습니다.
  • CS9033: 'System.Runtime.CompilerServices.RequiredMemberAttribute'를 사용하지 마세요. 대신 필수 필드 및 속성에 'required' 키워드를 사용합니다.
  • CS9034: 필수 멤버를 설정할 수 있어야 합니다.
  • CS9035: 개체 이니셜라이저 또는 특성 생성자에서 필수 멤버를 설정해야 합니다.
  • CS9036: 필요한 멤버 'memberName'에 값이 할당되어야 하며 중첩 멤버 또는 컬렉션 이니셜라이저를 사용할 수 없습니다.
  • CS9037: 필요한 멤버 목록이 잘못되어 해석할 수 없습니다.
  • CS9038: 기본 형식에 필요한 멤버 목록이 잘못되어 해석할 수 없습니다. 이 생성자를 사용하려면 'SetsRequiredMembers' 특성을 적용합니다.
  • CS9039: 이 생성자는 해당 특성이 있는 생성자에 연결되므로 'SetsRequiredMembers'를 추가해야 합니다.
  • CS9040: 형식은 필요한 멤버가 있으므로 제네릭 형식 또는 메서드의 매개 변수에 대한 'new()' 제약 조건을 충족할 수 없습니다.
  • CS9042: 포함된 형식이 사용되지 않거나 모든 생성자가 사용되지 않는 한 필수 멤버는 'ObsoleteAttribute'로 특성을 지정해서는 안 됩니다.
  • CS9045: 필요한 멤버는 스크립트 또는 제출의 최상위 수준에서 허용되지 않습니다.
  • CS9258: 이 언어 버전에서 'field' 키워드는 속성에 대한 합성된 지원 필드에 바인딩됩니다. 합성된 지원 필드가 생성되지 않도록 하고 기존 멤버를 참조하려면 대신 '' 또는 'this.field@field'를 사용합니다.
  • CS9263: 부분 속성은 정의와 구현 둘 다에 이니셜라이저를 가질 수 없습니다.

필드 지원 속성에 대해 다음 경고를 생성할 수 있습니다.

  • CS9264: 생성자를 종료할 때 null을 허용하지 않는 속성은 null이 아닌 값을 포함해야 합니다. 'required' 한정자를 추가하거나 속성을 nullable로 선언하거나 '[field: MaybeNull, AllowNull]' 특성을 추가하는 것이 좋습니다.
  • CS9266: 다른 접근자가 사용 중이므로 속성의 한 접근자가 'field'를 사용해야 합니다.
  • CS9273: 이 언어 버전에서 'field'은 속성 접근자 내의 키워드입니다. 변수 이름을 바꾸거나 식별자 '@field'를 대신 사용합니다.

다음 섹션에서는 이러한 오류 및 경고의 원인과 수정을 설명합니다.

속성 접근자 구문

  • CS0545: 'function': 'property'에 재정의 가능한 get 접근자가 없으므로 재정의할 수 없습니다.
  • CS0571: 'function': 명시적으로 연산자 또는 접근자를 호출할 수 없습니다.
  • CS1043: { 또는 ; 예상

속성 접근자 구문 오류를 수정하려면 특정 진단에 따라 다음 변경 내용 중 하나를 적용합니다.

기본 클래스 속성 선언(CS0545)에 있는 접근자만 재정의합니다. 컴파일된 IL에서 재정의할 가상 메서드가 없으므로 기본 클래스에 없거나 액세스할 수 없는 속성 접근자를 재정의할 수 없습니다. 기본 클래스 속성에 접근자가 하나만 있는 경우, 재정의 set에서 해당 접근자를 제거하거나 누락된 접근자를 기본 클래스에 추가하고 virtual로 표시하십시오. 또는 override 키워드를 사용하는 대신, new 키워드를 사용하여 다른 접근자를 가진 완전히 새로운 속성 정의로 기본 클래스 속성을 숨길 수 있습니다.

접근자 메서드를 직접 호출하는 대신 속성 구문을 사용하여 속성에 액세스합니다(CS0571). 속성 접근자가 get_PropertyNameset_PropertyName와 같은 이름의 특수 메서드로 컴파일되지만, 이러한 메서드는 속성 구문(obj.Propertyobj.Property = value)을 통해 호출해야 합니다. 이 방법은 적절한 의미 체계를 유지하고 컴파일러가 필요한 검사를 수행할 수 있도록 합니다. 현재 연산자가 op_Increment와 같은 메서드로 컴파일되지만, 메서드 호출이 아닌 연산자 구문(++obj)을 사용하여 호출되어야 한다는 동일한 원칙이 적용됩니다.

중괄호나 식 본문을 사용하여 적절한 속성 접근자 구문(CS1043)을 사용하세요. 속성 접근자는 C# 구문 규칙을 따라야 합니다. 접근자 본문은 중괄호로 감싸야 하고, 식 본문 접근자는 => 구문을 사용해야 하며, 자동 구현 속성은 접근자 목록 후에 세미콜론으로 끝나야 합니다. 컴파일러는 완전한 접근자 구현 또는 자동 구현 접근자를 나타내는 세미콜론을 예상합니다.

자세한 내용은 속성, 상속속성 사용을 참조하세요.

자동 구현 속성

  • CS0840: '속성 이름'은 추상 또는 extern으로 표시되지 않으므로 본문을 선언해야 합니다. 자동으로 구현된 속성은 get 및 set 접근자를 모두 정의해야 합니다.
  • CS1014: get 또는 set 접근자가 필요합니다.

자동 구현 속성 오류를 수정하려면 특정 진단에 따라 다음 변경 내용 중 하나를 적용합니다.

속성 선언(CS0840)에 getset 접근자를 모두 추가합니다. 자동 구현 속성은 컴파일러가 지원 필드를 생성해야 하며, 컴파일러는 스토리지를 읽고 쓸 수 있도록 두 접근자가 모두 있는 경우에만 이 작업을 수행할 수 있습니다. 읽기 전용 자동 구현 속성이 필요한 경우, 접근자를 포함하고 컴파일러가 지원 필드를 생성하도록 허용하면서도 set 쓰기 액세스를 제한하도록 private 설정하세요. 속성이 abstract 또는 extern로 선언된 경우, 이러한 한정자가 구현이 다른 곳에서 제공됨을 나타내므로 접근자 본문을 완전히 제거해야 합니다. 속성의 경우 partial 선언 및 구현을 부분 형식 선언 간에 분할할 수 있습니다.

속성 선언에 유효한 접근자 키워드 getset(CS1014)만 포함되어 있는지 확인합니다. 프로퍼티 문법은 프로퍼티 본문 내에서 임의의 문장이나 멤버 선언이 아닌 접근자 선언만 허용합니다. 추가 논리가 필요한 경우, 귀하의 코드를 포함한 명시적 접근자 본문으로 속성을 구현하십시오. 필드 또는 메서드를 선언하려는 경우 해당 선언을 속성 외부로 멤버 선언이 허용되는 클래스 또는 구조체 본문으로 이동합니다.

자세한 내용은 속성자동 구현 속성을 참조하세요.

필드 기반 속성

  • CS9258: 이 언어 버전에서 'field' 키워드는 속성에 대한 합성된 지원 필드에 바인딩됩니다. 합성된 지원 필드가 생성되지 않도록 하고 기존 멤버를 참조하려면 대신 '' 또는 'this.field@field'를 사용합니다.
  • CS9263: 부분 속성은 정의와 구현 둘 다에 이니셜라이저를 가질 수 없습니다.
  • CS9264: 생성자를 종료할 때 null을 허용하지 않는 속성은 null이 아닌 값을 포함해야 합니다. 'required' 한정자를 추가하거나 속성을 nullable로 선언하거나 '[field: MaybeNull, AllowNull]' 특성을 추가하는 것이 좋습니다.
  • CS9266: 다른 접근자가 사용 중이므로 속성의 한 접근자가 'field'를 사용해야 합니다.
  • CS9273: 이 언어 버전에서 'field'은 속성 접근자 내의 키워드입니다. 변수 이름을 바꾸거나 식별자 '@field'를 대신 사용합니다.

필드 지원 속성 오류를 수정하려면 특정 진단에 따라 다음 변경 내용 중 하나를 적용합니다.

field으로 명명된 변수를 다른 식별자로 이름을 변경하거나, @field 이스케이프 구문을 사용하여 변수를 참조하십시오(CS9258, CS9273). 이 수정은 C# 13 이상에서 속성 접근자 내부에서 컴파일러가 합성한 지원 필드를 참조하는 컨텍스트 키워드이기 때문에 필요합니다. 기존 멤버 field에 액세스하려면, 참조를 명확하게 하기 위해 합성된 지원 필드 대신 this.field을 사용하여 해당 멤버를 한정하세요.

부분 속성 정의 또는 구현에서 이니셜라이저를 제거하고 하나만 유지합니다(CS9263). 두 위치에서 이니셜라이저를 허용하면 사용해야 하는 값이 모호해지고 지원 필드가 잠재적으로 다른 값으로 두 번 초기화될 수 있으므로 이 수정이 필요합니다.

[field: MaybeNull, AllowNull] 속성 선언에 특성을 추가하여 지원 필드를 nullable(CS9264)으로 처리해야 함을 나타냅니다. 이 수정은 속성 형식과 컴파일러 합성 지원 필드 간의 null 허용 여부 기대치를 조정하여 속성이 nullable이 아닌 것으로 선언되었지만 field 키워드 사용으로 인해 null일 수 있음을 시사하는 불일치를 해결합니다. 또는 속성 형식을 nullable로 변경하거나, 초기화를 보장하기 위해 한정자를 추가 required 하거나, 생성자에서 속성을 초기화합니다.

두 접근자에서 field 키워드를 일관되게 사용하거나, 두 접근자에서 명시적으로 뒷받침 필드를 사용하세요 (CS9266). 이 수정은 한 접근자가 컴파일러 합성 지원 필드를 수정하는 동안 다른 접근자가 다른 스토리지 위치를 수정하여 일관되지 않은 속성 동작을 초래하는 잠재적인 버그를 방지합니다.

자세한 내용은 필드 키워드Partial 속성을 참조하세요.

읽기 전용 속성

  • CS0200: 속성 또는 인덱서 'property'를 할당할 수 없습니다. 읽기 전용입니다.
  • CS8341: 읽기 전용 구조체의 자동 구현 인스턴스 속성은 읽기 전용이어야 합니다.
  • CS8657: 정적 멤버를 '읽기 전용'으로 지정할 수 없습니다.
  • CS8658: 자동 구현된 'set' 접근자를 '읽기 전용'으로 표시할 수 없습니다.
  • CS8659: 자동 구현 속성에는 'set' 접근자가 있으므로 'readonly'로 표시할 수 없습니다.
  • CS8660: 속성과 해당 접근자 모두에서 'readonly' 한정자를 지정할 수 없습니다.
  • CS8661: 속성의 두 접근자에 대해 'readonly' 한정자를 지정할 수 없습니다.
  • CS8664: 속성에 get 및 set가 모두 있는 경우에만 접근자에서 'readonly'를 사용할 수 있습니다.

읽기 전용 속성 오류를 수정하려면 특정 진단에 따라 다음 변경 내용 중 하나를 적용합니다.

쓰기 가능하도록 속성에 a set 또는 init 접근자를 추가합니다(CS0200). set 접근자가 없는 속성은 읽기 전용이며 선언 형식의 생성자 또는 필드 이니셜라이저에서만 할당할 수 있으므로 이 수정이 필요합니다. 개체를 초기화하는 동안 속성을 설정해야 하지만 나중에는 변경할 수 없는 경우, set 접근자 대신 init 접근자를 사용하세요. 속성이 읽기 전용으로 유지되어야 하는 경우 초기화가 허용되는 생성자로 할당을 이동하거나 할당이 필요한지 여부를 다시 고려합니다.

자동 구현 인스턴스 속성을 readonly struct에 선언할 때 readonly (CS8341). 이 수정은 포함된 구조체의 불변성 계약을 적용하여 모든 인스턴스 멤버가 보증을 readonly 준수하도록 합니다. 속성을 변경할 필요가 있는 경우, 구조체 선언에서 readonly 한정자를 제거하거나, 인스턴스 상태를 변경하지 않는 명시적 백킹 필드 및 접근자 메서드를 사용하여 속성을 구현하십시오.

readonly 정적 속성 또는 접근자 선언(CS8657)에서 한정자를 제거합니다. 한정자는 인스턴스 상태를 수정하지 않으며 정적 멤버는 보호할 인스턴스 상태가 없음을 나타내기 위해 구조체의 인스턴스 멤버에만 적용되므로 이 수정이 필요합니다 readonly . 정적 읽기 전용 속성이 필요한 경우 set 접근자를 생략하고 readonly 수정자를 사용하지 마십시오.

readonly 자동 구현 set 접근자에서 한정자를 제거하거나 접근자에 get 만 적용합니다(CS8658). 인스턴스 상태를 수정하지 않도록 보장하는 readonly 한정자와 모순되게 접근자가 본질적으로 상태를 수정하기 때문에 set의 수정이 필요합니다. 초기화 중에 설정할 수 있지만 나중에 읽기 전용인 속성이 필요한 경우 init 접근자를 set 접근자 대신 사용합니다.

속성에 set 접근자가 있는 경우, 속성 선언에서 readonly 한정자를 제거합니다(CS8659). 인스턴스 상태를 수정할 수 있는 set 접근자가 있는 속성 때문에 readonly 보장이 위반될 수 있으므로 이 수정이 필요합니다. 초기화 시간 설정만 필요한 경우, set 접근자를 init 접근자로 바꾸거나 set 접근자를 완전히 제거하여 속성을 실제로 읽기 전용으로 만드세요.

readonly 속성 선언 또는 개별 접근자에 한정자를 배치하지만 둘 다 배치하지는 않습니다(CS8660, CS8661). 이 수정은 어떤 한정자가 우선적으로 적용되는지 혼동을 일으킬 수 있는 중복 한정자 선언을 방지합니다. 특정 접근자를 readonly표시하려면 속성 선언에서 한정자를 제거하고 접근자에만 배치합니다. 또는 모든 접근자가 있어야 하는 readonly경우 개별 접근자가 아닌 속성 자체를 표시합니다.

개별 접근자를 readonly로 표시하는 경우 getset 접근자가 모두 있는지 확인합니다 (CS8664). 개별 접근자의 한정자는 상태를 수정하는 접근자와 그렇지 않은 접근자를 구분하기 때문에 readonly 이 수정이 필요하며, 이는 두 접근자 형식이 모두 존재하는 경우에만 의미가 있습니다. 속성에 get 접근자만 있는 경우, 개별 접근자 대신 전체 속성을 readonly로 표시합니다.

자세한 내용은 readonly 인스턴스 멤버, init 키워드속성을 참조하세요.

속성 이니셜라이저

  • CS8050: 자동 구현 속성 또는 'field' 키워드를 사용하는 속성만 이니셜라이저를 사용할 수 있습니다.
  • CS8051: 자동 구현 속성에는 get 접근자가 있어야 합니다.
  • CS8053: 인터페이스의 인스턴스 속성에는 이니셜라이저가 있을 수 없습니다.

속성 이니셜라이저 오류를 수정하려면 특정 진단에 따라 다음 변경 내용 중 하나를 적용합니다.

접근자 본문을 제거하고 컴파일러가 지원 필드(CS8050)를 생성하도록 하여 자동 구현 구문을 사용하도록 속성을 변환합니다. 컴파일러 관리 스토리지가 있는 속성에만 이니셜라이저가 있을 수 있으므로 접근자 논리가 실행되기 전에 초기화가 수행되도록 하므로 이 수정이 필요합니다. 또는 접근자를 구현하여 field 키워드를 사용하고 컴파일러가 합성한 백업 필드에 액세스하도록 수정합니다. 이 방법을 사용하면 사용자 지정 접근자 논리를 유지하면서 이니셜라이저를 사용할 수 있습니다. 두 방법 모두 적합하지 않은 경우 이니셜라이저를 제거하고 초기화 시퀀스를 완전히 제어할 수 있는 생성자의 값을 대신 할당합니다.

get 자동 구현 속성에 접근자를 추가하여 초기화된 값(CS8051)을 읽을 수 있도록 합니다. 이 수정은 이니셜라이저가 검색할 수 있어야 하는 값을 설정하고 쓰기 전용 속성이 속성 초기화에 대한 이러한 기본 기대치를 위반하기 때문에 필요합니다. 쓰기 전용 속성이 진정으로 필요한 경우 지원 필드를 사용하여 접근자를 명시적으로 구현하고 속성 이니셜라이저를 사용하는 대신 생성자에서 직접 필드를 할당합니다.

인터페이스 속성 선언에서 이니셜라이저를 제거합니다(CS8053). 인터페이스는 초기 값으로 구체적인 구현을 제공하는 대신 형식을 구현하기 위한 계약을 정의하기 때문에 이 수정이 필요합니다. 기본값을 제공해야 하는 경우 인터페이스를 구현하는 클래스에서 속성을 구현하거나 기본 인터페이스 메서드(C# 8.0 이상에서 사용 가능)를 사용하여 기본 구현을 제공합니다.

자세한 내용은 속성, 자동 구현 속성필드 키워드를 참조하세요.

필수 멤버

  • CS9029: 형식 및 별칭의 이름은 'required'로 지정할 수 없습니다.
  • CS9030: 필요한 멤버를 재정의하므로 멤버가 필요합니다.
  • CS9031: 파생 멤버에서 필요한 멤버를 숨길 수 없습니다.
  • CS9032: 필요한 멤버는 포함 형식보다 덜 표시되거나 setter가 덜 표시될 수 없습니다.
  • CS9033: 'System.Runtime.CompilerServices.RequiredMemberAttribute'를 사용하지 마세요. 대신 필수 필드 및 속성에 'required' 키워드를 사용합니다.
  • CS9034: 필수 멤버를 설정할 수 있어야 합니다.
  • CS9035: 개체 이니셜라이저 또는 특성 생성자에서 필수 멤버를 설정해야 합니다.
  • CS9036: 필요한 멤버 'memberName'에 값이 할당되어야 하며 중첩 멤버 또는 컬렉션 이니셜라이저를 사용할 수 없습니다.
  • CS9037: 필요한 멤버 목록이 잘못되어 해석할 수 없습니다.
  • CS9038: 기본 형식에 필요한 멤버 목록이 잘못되어 해석할 수 없습니다. 이 생성자를 사용하려면 'SetsRequiredMembers' 특성을 적용합니다.
  • CS9039: 이 생성자는 해당 특성이 있는 생성자에 연결되므로 'SetsRequiredMembers'를 추가해야 합니다.
  • CS9040: 형식은 필요한 멤버가 있으므로 제네릭 형식 또는 메서드의 매개 변수에 대한 'new()' 제약 조건을 충족할 수 없습니다.
  • CS9042: 포함된 형식이 사용되지 않거나 모든 생성자가 사용되지 않는 한 필수 멤버는 'ObsoleteAttribute'로 특성을 지정해서는 안 됩니다.
  • CS9045: 필요한 멤버는 스크립트 또는 제출의 최상위 수준에서 허용되지 않습니다.

필요한 멤버 오류를 수정하려면 특정 진단에 따라 다음 변경 내용 중 하나를 적용합니다.

형식 또는 별칭 이름으로 사용하지 required 마세요(CS9029). 이 수정은 C# 11 이상에서 required가 상황별 키워드이므로, 키워드가 나타날 수 있는 코드에서 이를 형식 이름으로 사용하면 모호성이 생기기 때문에 필요합니다.

필요한 멤버를 재정의할 때 파생 멤버가 required 한정자를 유지 관리하는지 확인합니다(CS9030). 이 수정은 기본 클래스에 의해 설정된 계약을 적용하여 모든 파생 형식이 동일한 초기화 요구 사항을 유지하도록 보장합니다. 필수가 아닌 멤버로 필수 멤버를 파생 클래스(CS9031)에서 숨기는 것을 피하세요. 이 작업은 소비자가 기본 형식에서 기대하는 초기화 계약을 무너뜨리기 때문입니다.

필요한 멤버를 해당 형식만큼 또는 그보다 더 잘 보이도록 하고, 속성 setter도 충분히 잘 보이도록 설정합니다(CS9032). 이렇게 수정하면 형식에 공개적으로 액세스할 수 있지만 형식이 생성되는 모든 컨텍스트에서 필요한 멤버를 초기화할 수 없는 상황을 방지할 수 있습니다.

required 수동으로 적용하는 대신 키워드를 RequiredMemberAttribute 사용합니다(CS9033). 이렇게 수정하면 컴파일러가 올바른 메타데이터를 생성하고 필요한 모든 멤버 규칙을 적용합니다. 수동 특성 애플리케이션이 제대로 수행되지 않을 수 있습니다.

필수 멤버가 접근자를 설정했거나 설정할 수 있는지 확인합니다(CS9034). 이 수정은 쓰기 액세스가 필요한 개체를 만드는 동안 필요한 멤버를 초기화해야 하기 때문에 필요합니다. 인스턴스를 만들 때 개체 이니셜라이저(CS9035, CS9036)에서 필요한 멤버를 직접 초기화합니다. 속성에 액세스하기 전에 필요한 멤버 자체를 설정해야 하므로 중첩 멤버 이니셜라이저 또는 컬렉션 이니셜라이저를 사용하는 대신 각 필수 멤버에 값을 할당해야 합니다.

SetsRequiredMembers 특성을 모든 필수 멤버를 초기화하는 생성자의 본문에 적용합니다(CS9038, CS9039). 이 수정은 생성자가 필요한 멤버 계약을 수행하여 개체 이니셜라이저 없이 개체를 만들 수 있도록 컴파일러에 알릴 수 있습니다. 다른 생성자에 SetsRequiredMembers와 연결된 생성자는 그 특성을 가져야 합니다.

매개 변수가 없는 생성자는 개체 이니셜라이저 없이 필요한 멤버 초기화를 보장할 수 없기 때문에 제약 조건(new())을 충족 해야 하는 형식에서 필수 멤버를 사용하지 마세요. 포함된 형식이나 모든 생성자가 사용되지 않는 경우가 아니라면(CS9042), 필수 멤버를 사용되지 않는 것으로 표시하지 마세요. 이는 멤버가 필요하지만 사용이 권장되지 않는 상황을 방지하기 위함입니다. 이러한 컨텍스트는 필요한 멤버를 설정하는 데 필요한 개체 초기화 구문을 지원하지 않으므로 최상위 문 또는 스크립트 컨텍스트(CS9045)에서는 필수 멤버가 허용되지 않습니다.

자세한 내용은 필수 한정자 참조 문서 및 개체 및 컬렉션 이니셜라이저 가이드를 참조하세요 .

참조 반환 속성

  • CS8145: 자동 구현 속성은 참조로 반환할 수 없습니다.
  • CS8147: 참조로 반환되는 속성은 접근자를 설정할 수 없습니다.

참조 반환 속성 오류를 수정하려면 특정 진단에 따라 다음 변경 내용 중 하나를 적용합니다.

지원 필드를 사용하여 속성(property)을 명시적으로 구현하고 get 키워드를 접근자의 반환 식에서 사용합니다(CS8145). 자동 구현 속성은 컴파일러가 내부적으로 관리하는 프라이빗 지원 필드를 생성하기 때문에 이 수정이 필요합니다. 프라이빗 필드에 대한 참조를 반환하면 호출자가 직접 액세스해서는 안 되는 내부 스토리지가 노출됩니다. ref-returning 속성을 만들려면 명시적 필드를 선언하고 구문을 사용하여 => ref backingField 반환합니다. 또는 스토리지를 직접 수정할 수 있도록 참조를 반환할 필요가 없는 경우, 속성 선언에서 ref 한정자를 제거합니다.

참조 반환 속성(CS8147)에서 set 접근자를 제거합니다. 참조 반환 속성은 이미 반환된 참조 자체를 통해 읽기 및 쓰기 액세스를 모두 제공하므로 이 수정이 필요합니다. 호출자는 별도의 setter 메서드 없이도 참조를 통해 값을 직접 수정할 수 있습니다. 접근자를 set 포함하면 동일한 스토리지를 수정하기 위한 두 가지 메커니즘이 생성되며 이는 중복되며 어떤 수정 경로를 사용해야 하는지 혼동할 수 있습니다.

자세한 내용은 ref 반환 및 ref 지역 및속성을 참조하세요.