이 문서에서는 다음 컴파일러 오류에 대해 설명합니다.
- CS0132: '생성자': 정적 생성자는 매개 변수가 없어야 합니다.
- CS0514: 정적 생성자는 명시적 'this' 또는 'base' 생성자 호출을 가질 수 없습니다.
- CS0515: 정적 생성자에는 액세스 한정자가 허용되지 않습니다.
- CS0516: 생성자 '생성자'가 자신을 호출할 수 없습니다.
- CS0517: 'class'에는 기본 클래스가 없으며 기본 생성자를 호출할 수 없습니다.
- CS0522: 구조체는 기본 클래스 생성자를 호출할 수 없습니다.
- CS0526: 인터페이스에는 생성자를 포함할 수 없습니다.
- CS0568: 구조체에는 명시적 매개 변수가 없는 생성자를 포함할 수 없습니다.
- CS0573: '필드 선언': 구조체에 인스턴스 필드 이니셜라이저를 사용할 수 없습니다.
- CS0710: 정적 클래스에는 인스턴스 생성자를 사용할 수 없습니다.
- CS0768: 생성자는 다른 생성자를 통해 자신을 호출할 수 없습니다.
- CS1018: 'this' 또는 'base' 키워드가 필요합니다.
- CS8054: 열거형에는 명시적 매개 변수가 없는 생성자를 포함할 수 없습니다.
- CS8091: extern할 수 없으며 생성자 이니셜라이저를 사용할 수 없습니다.
- CS8861: 예기치 않은 인수 목록입니다.
- CS8862: 매개 변수 목록이 있는 형식에서 선언된 생성자에는 'this' 생성자 이니셜라이저가 있어야 합니다.
- CS8358: 'in' 매개 변수가 있으므로 특성 생성자를 사용할 수 없습니다.
- CS8867: 기본 형식 ''{0}에서 액세스할 수 있는 복사 생성자를 찾을 수 없습니다.
- CS8868: 레코드의 복사 생성자는 기본의 복사 생성자 또는 레코드가 개체에서 상속되는 경우 매개 변수가 없는 개체 생성자를 호출해야 합니다.
- CS8878: 레코드가 봉인되지 않았으므로 복사 생성자 '{0}'는 공용이거나 보호되어야 합니다.
- CS8910: 기본 생성자가 합성된 복사 생성자와 충돌합니다.
- CS8958: 매개 변수가 없는 구조체 생성자는 'public'이어야 합니다.
- CS8982: 매개 변수 목록이 있는 '구조체'에 선언된 생성자에는 기본 생성자 또는 명시적으로 선언된 생성자를 호출하는 'this' 이니셜라이저가 있어야 합니다.
- CS8983: 필드 이니셜라이저가 있는 '구조체'에는 명시적으로 선언된 생성자가 포함되어야 합니다.
- CS9105: 이 컨텍스트에서 기본 생성자 매개 변수를 사용할 수 없습니다.
- CS9106: 식별자는 이 컨텍스트에서 형식과 매개 변수 간에 모호합니다.
- CS9108: 익명 메서드, 람다 식, 쿼리 식 또는 로컬 함수 내에 ref와 유사한 형식이 있는 매개 변수를 사용할 수 없습니다.
-
CS9109: 인스턴스 멤버 내에서 또는 기본 생성자 매개 변수를 사용할
refoutin수 없습니다. - CS9110: 인스턴스 멤버 내에 ref와 유사한 형식이 있는 기본 생성자 매개 변수를 사용할 수 없습니다.
- CS9111: 구조체의 인스턴스 멤버 내 익명 메서드, 람다 식, 쿼리 식 및 로컬 함수는 기본 생성자 매개 변수에 액세스할 수 없습니다.
- CS9112: 구조체 내의 익명 메서드, 람다 식, 쿼리 식 및 로컬 함수는 인스턴스 멤버 내에서도 사용되는 기본 생성자 매개 변수에 액세스할 수 없습니다.
- CS9114: 읽기 전용 형식의 기본 생성자 매개 변수는 할당할 수 없습니다. 단, 형식의 init 전용 setter 또는 변수 이니셜라이저에서는 가능합니다.
- CS9115: 읽기 전용 형식의 기본 생성자 매개 변수는 쓰기 가능한 참조로 반환할 수 없습니다.
- CS9116: 읽기 전용 형식의 기본 생성자 매개 변수는 ref 또는 out 값으로 사용할 수 없습니다(형식의 init 전용 setter 또는 변수 이니셜라이저 제외).
- CS9117: 읽기 전용 형식의 기본 생성자 매개 변수의 멤버는 수정할 수 없습니다(init 전용 설정자 또는 변수 초기값 설정자에서는 예외).
- CS9118: 읽기 전용 형식의 기본 생성자 매개 변수의 멤버는 쓰기 가능 참조로 반환할 수 없습니다.
-
CS9119: 읽기 전용 형식의 기본 생성자 매개 변수 멤버는 값 설정이 불가합니다 (
ref또는out값으로 사용할 수 없음, 형식의 init 전용 setter나 변수 초기화 값을 제외하고). - CS9120: 참조로 기본 생성자 매개 변수를 반환할 수 없습니다.
- CS9121: 형식의 구조체 기본 생성자 매개 변수로 인해 구조체 레이아웃의 주기가 발생합니다.
- CS9122: 예기치 않은 매개 변수 목록입니다.
- CS9136: 인스턴스 멤버 내에서 형식의 기본 생성자 매개 변수를 사용할 수 없습니다.
또한 다음 경고는 이 문서에서 다룹니다.
- CS0824: 생성자 'name'이 외부로 표시됩니다.
- CS9107: 매개 변수가 바깥쪽 형식의 상태로 캡처되고 해당 값도 기본 생성자에 전달됩니다. 기본 클래스에서도 값을 캡처할 수 있습니다.
- CS9113: 매개 변수를 읽지 않았습니다.
- CS9124: 매개 변수는 바깥쪽 형식의 상태로 캡처되며 해당 값은 필드, 속성 또는 이벤트를 초기화하는 데도 사용됩니다.
- CS9179: 주요 생성자 매개변수가 기본 클래스의 멤버에 의해 가려집니다.
- CS9018: 자동 구현 속성이 명시적으로 할당되기 전에 읽혀져서, 이전에 'default' 값이 암시적으로 할당됩니다.
- CS9019: 필드가 명시적으로 할당되기 전에 읽혀져서 'default'로의 이전 암시적 할당이 발생하고 있습니다.
- CS9020: 'this' 개체는 모든 필드가 할당되기 전에 읽기 때문에 명시적으로 할당되지 않은 필드에 'default'의 암시적 할당이 발생합니다.
- CS9021: 자동 구현 속성이 명시적으로 할당되기 전에 컨트롤이 호출자에게 반환되어 이전 암시적 'default'가 할당됩니다.
- CS9022: 필드가 명시적으로 할당되기 전에 컨트롤이 호출자에게 반환되어 이전 암시적 할당 'default'가 발생합니다.
정적 생성자
- CS0132: '생성자': 정적 생성자는 매개 변수가 없어야 합니다.
- CS0514: 정적 생성자는 명시적 'this' 또는 'base' 생성자 호출을 가질 수 없습니다.
- CS0515: 정적 생성자에는 액세스 한정자가 허용되지 않습니다.
정적 생성자는 형식에 대한 정적 데이터를 초기화합니다. 자세한 내용은 정적 생성자를 참조 하세요.
이러한 오류를 수정하려면 정적 생성자 선언이 다음 규칙을 따르는지 확인합니다.
- 정적 생성자는 매개 변수가 없어야 하므로 정적 생성자 선언에서 매개 변수를 제거합니다(CS0132). 초기화 값을 전달해야 하는 경우 정적 생성자가 실행되기 전에 설정한 정적 필드 또는 속성을 사용하는 것이 좋습니다.
- 정적 생성자에서
public,protected,private, 또는internal와 같은 액세스 한정자를 제거하십시오. 런타임이 정적 생성자의 실행 시기를 제어하므로 액세스 한정자는 의미가 없습니다(CS0515). - 정적 생성자는 다른 생성자(CS0514)에 연결될 수 없으므로, 정적 생성자에서 모든
: base()또는: this()생성자 이니셜라이저 호출을 제거하십시오. 런타임이 있는 경우 기본 클래스 정적 생성자를 자동으로 호출합니다.
생성자 선언
- CS0526: 인터페이스에는 생성자를 포함할 수 없습니다.
- CS0710: 정적 클래스에는 인스턴스 생성자를 사용할 수 없습니다.
- CS8054: 열거형에는 명시적 매개 변수가 없는 생성자를 포함할 수 없습니다.
- CS8358: 'in' 매개 변수가 있으므로 특성 생성자를 사용할 수 없습니다.
- CS8091: 생성자는 extern할 수 없으며 생성자 이니셜라이저를 가질 수 없습니다.
class 및 struct 형식에서만 생성자를 선언할 수 있으며, record class 및 record struct 형식도 포함됩니다. 자세한 내용은 인스턴스 생성자를 참조하세요.
이러한 오류를 해결하려면 다음 제안을 시도해 보세요.
생성자는 class 또는 struct 형식으로 이동해야 합니다. 왜냐하면 생성자를 interface 또는 enum 형식에 선언할 수 없기 때문입니다 (CS0526, CS8054). 인터페이스는 계약을 정의하지만 초기화 논리를 제공하지 않으며 열거형 형식에는 컴파일 시간에 정의된 값이 있습니다.
정적 클래스를 인스턴스화할 수 없으므로 인스턴스 생성자(CS0710)를 가질 수 없으므로 정적 클래스에서 인스턴스 생성자를 제거합니다. 초기화 논리가 필요한 경우 정적 생성자를 대신 사용합니다.
특성 생성자는 매개 변수 한정자(in)를 지원하지 in 않으므로 특성 생성자에서 매개 변수를 값별 전달 매개 변수로 변경 합니다. 런타임은 in 한정자를 지원하지 않는 리플렉션을 사용하여 속성을 인스턴스화합니다.
extern 생성자에서 : base() 또는 : this() 초기화자를 제거하세요. extern 생성자는 다른 생성자에 연결할 수 없기 때문입니다. (CS8091) extern 생성자의 구현은 외부에서 제공되므로 생성자 체인을 사용할 수 없습니다.
생성자 선언에 대해 다음 경고를 생성할 수 있습니다.
- CS0824: 생성자가 외부로 지정되었습니다.
생성자가 표시 extern되면 컴파일러는 구현이 있는지 확인할 수 없습니다. 이 경고를 표시하지 않도록 하려면 외부 구현이 아닌 구현을 제공하거나 외부 구현이 올바르게 연결되어 있는지 확인합니다.
구조체 형식의 생성자
- CS0568: 구조체에는 명시적 매개 변수가 없는 생성자를 포함할 수 없습니다.
- CS0573: '필드 선언': 구조체에 인스턴스 필드 이니셜라이저를 사용할 수 없습니다.
- CS8958: 매개 변수가 없는 구조체 생성자는 'public'이어야 합니다.
- CS8982: 매개 변수 목록이 있는 '구조체'에 선언된 생성자에는 기본 생성자 또는 명시적으로 선언된 생성자를 호출하는 'this' 이니셜라이저가 있어야 합니다.
- CS8983: 필드 이니셜라이저가 있는 '구조체'에는 명시적으로 선언된 생성자가 포함되어야 합니다.
구조체 형식에는 생성자 및 필드 초기화에 대한 특정 규칙이 있습니다. 자세한 내용은 구조체 형식 문서의 구조체 초기화 및 기본값 섹션을 참조하세요.
이러한 오류를 해결하려면 다음 제안을 시도해 보세요.
- 이러한 오류는 이전 버전의 C#에서만 발생하므로 CS0568 또는 CS0573이 발생하는 경우 C# 10 이상으로 업그레이드합니다. 최신 C#에서는 구조체에서 명시적 매개 변수가 없는 생성자 및 필드 이니셜라이저를 허용합니다.
-
public매개 변수가 없는 구조체 생성자는 식 및 배열 할당이 구조체 인스턴스(default)를 제대로 초기화할 수 있도록 공용이어야 하므로 매개 변수가 없는 구조체 생성자에 액세스 한정자를 추가합니다. -
: this(...)매개 변수가 없는 모든 생성자가 기본 생성자 또는 다른 명시적으로 선언된 생성자에 연결하여 일관된 초기화(CS8982)를 보장해야 하므로 기본 생성자가 있는 구조체에서 명시적으로 선언된 생성자에 이니셜라이저를 추가합니다. - 컴파일러에 필드 이니셜라이저가 호출되도록 하려면 명시적 생성자가 필요하기 때문에 구조체에서 필드 이니셜라이저를 사용할 때 명시적 생성자를 선언합니다(CS8983). 이 생성자는 빈 본문이 있는 매개 변수가 없는 생성자일 수 있습니다.
다음 경고는 필드 또는 속성이 읽기 전에 또는 컨트롤이 호출자에게 반환되기 전에 명시적으로 할당되지 않았음을 나타냅니다.
- CS9018: 자동 구현된 속성이 명시적으로 할당되기 전에 읽혀서, 그 전에 'default'로 암시적으로 할당됩니다.
- CS9019: 명시적으로 할당되기 전에 필드를 읽어 'default'의 이전 암시적 할당이 발생합니다.
- CS9020: 모든 필드가 할당되기 전에 'this' 개체를 읽습니다. 이로 인해 'default'의 이전 암시적 할당이 명시적으로 할당되지 않은 필드에 발생합니다.
- CS9021: 자동 구현 속성이 명시적으로 할당되기 전에 컨트롤이 호출자에게 반환되어 이전 암시적 'default'가 할당됩니다.
- CS9022: 필드가 명시적으로 할당되기 전에 제어가 호출자에게 반환되어 이전 암시적 'default' 할당이 발생합니다.
이러한 경고를 비우려면 모든 필드와 자동 구현 속성을 읽기 전에 또는 생성자(CS9018, CS9019, CS9020, CS9021, CS9022)에서 컨트롤이 반환되기 전에 명시적으로 할당합니다. 할당되지 않은 멤버를 읽는 경우 컴파일러는 암시적으로 할당 default 합니다. 이는 의도된 동작이 아닐 수 있습니다.
base 및 this와 함께 생성자 호출
- CS0516: 생성자가 자신을 호출할 수 없습니다.
- CS0517: 'class'에는 기본 클래스가 없으며 기본 생성자를 호출할 수 없습니다.
- CS0522: 구조체는 기본 클래스 생성자를 호출할 수 없습니다.
- CS0768: 생성자는 다른 생성자를 통해 자신을 호출할 수 없습니다.
- CS1018: 'this' 또는 'base' 키워드가 필요합니다.
생성자 이니셜라이저를 사용하면 한 생성자가 : this() 또는 : base()를 사용하여 다른 생성자를 호출할 수 있습니다. 자세한 내용은 생성자 사용을 참조하세요.
이러한 오류를 해결하려면 다음 제안을 시도해 보세요.
- 생성자가 다른 생성자(CS0516, CS0768)를 통해 직접 또는 간접적으로 자신을 호출할 수 없으므로 순환 생성자 호출 체인을 중단합니다. 생성자 체인이 결국 동일한 형식의 다른 생성자를 호출하지 않는 생성자에서 종료되는지 확인합니다.
-
: base()이러한 형식에는 호출할 기본 클래스 생성자가 없기 때문에 구조체 형식의 생성자 또는 생성자System.Object에서 이니셜라이저를 제거합니다(CS0517, CS0522). 구조체 형식은 암시적으로 상속 System.ValueType되지만 해당 생성자를 명시적으로 호출할 수는 없습니다. - 생성자 이니셜라이저를 완료하거나 생성자 선언에서 콜론(
:)을 제거합니다. 콜론이 생성자 서명을 따르는 경우 컴파일러에는this()이base()필요합니다. 적절한 생성자 호출을 추가하거나 체인이 없는 경우 콜론을 완전히 제거합니다.
레코드 및 복사 생성자
- CS8867: 기본 형식에서 액세스할 수 있는 복사 생성자를 찾을 수 없습니다.
- CS8868: 레코드의 복사 생성자는 기본의 복사 생성자 또는 레코드가 개체에서 상속되는 경우 매개 변수가 없는 개체 생성자를 호출해야 합니다.
- CS8878: 레코드가 봉인되지 않았으므로 복사 생성자는 공용이거나 보호되어야 합니다.
- CS8910: 기본 생성자가 합성된 복사 생성자와 충돌합니다.
파생 레코드 형식에서 명시적 복사 생성자는 이니셜라이저를 사용하여 : this() 기본 형식의 복사 생성자를 호출해야 합니다. 레코드가 직접 상속되는 System.Object경우 매개 변수가 없는 개체 생성자를 대신 호출할 수 있습니다(CS8868).
레코드 에는 컴파일러 합성 복사 생성자가 포함됩니다. 명시적 복사 생성자를 작성할 수 있지만 특정 요구 사항을 충족해야 합니다. 컴파일러는 레코드 복사 생성자가 다음 요구 사항을 위반할 때 오류를 생성합니다.
- 기본 형식에는 액세스 가능한 복사 생성자가 있어야 합니다. 모든
record형식에는 복사 생성자가 있습니다. 기본 형식이record있는지 확인하거나 액세스 가능한 복사 생성자를 추가합니다(CS8867). - 파생 레코드 형식에서 명시적 복사 생성자는 이니셜라이저를 사용하여
: base()기본 형식의 복사 생성자를 호출해야 합니다. 레코드가 직접 상속되는 System.Object경우 매개 변수가 없는 개체 생성자를 대신 호출할 수 있습니다(CS8868). - 복사 생성자는 레코드 형식이
sealed아닌 경우에public이나protected이어야 합니다. 복사 생성자(CS8878)에 적절한 액세스 한정자를 추가합니다. - 명시적 복사 생성자에 합성된 복사 생성자와 동일한 서명이 있는 경우 정의가 충돌합니다. 명시적 복사 생성자를 제거하거나 서명을 수정합니다(CS8910).
기본 생성자 선언
기본 생성자는 형식 선언에서 직접 매개 변수를 선언합니다. 컴파일러는 필드를 합성하여 멤버 또는 필드 이니셜라이저에서 사용할 때 기본 생성자 매개 변수를 저장합니다.
생성자 체인
- CS8861: 예기치 않은 인수 목록입니다.
- CS8862: 매개 변수 목록이 있는 형식에서 선언된 생성자에는 'this' 생성자 이니셜라이저가 있어야 합니다.
- CS9122: 예기치 않은 매개 변수 목록입니다.
형식에 기본 생성자가 있는 경우 명시적으로 선언된 다른 모든 생성자는 : this(...)을 사용하여 기본 생성자에 연결해야 합니다.
: this(...) 기본 생성자(CS8862)에 적절한 인수를 전달하는 이니셜라이저를 추가합니다.
기본 형식에 기본 생성자가 없는 경우 기본 형식 참조에서 매개 변수 목록을 제거합니다. 구문 class Derived : Base(args) 은 기본 생성자(Base)가 있는 경우에만 유효합니다. 마찬가지로 인터페이스에 기본 생성자(interface)가 있을 수 없으므로 선언에서 기본 생성자 매개 변수 목록을 제거합니다.
기본 생성자 호출의 매개 변수 사용
- CS9105: 이 컨텍스트에서 기본 생성자 매개 변수를 사용할 수 없습니다.
- CS9106: 식별자는 이 컨텍스트에서 형식과 매개 변수 간에 모호합니다.
기본 생성자 선언의 일부로 전달하는 경우에만 기본 생성자 호출에서 기본 생성자 매개 변수를 사용할 수 있습니다.
CS9105를 수정하려면 명시적으로 선언된 생성자의 호출에서 매개 변수 사용량을 사용하는 대신 형식 선언의 : base() 기본 절로 이동합니다.
형식과 기본 생성자 매개 변수가 동일한 이름을 공유하는 경우 참조가 모호해집니다. CS9106을 수정하려면 형식 또는 매개 변수의 이름을 바꿉니다.
Ref 유사 형식 매개 변수
- CS9108: 익명 메서드, 람다 식, 쿼리 식 또는 로컬 함수 내에 ref와 유사한 형식이 있는 매개 변수를 사용할 수 없습니다.
-
CS9109: 인스턴스 멤버 내에서 또는 기본 생성자 매개 변수를 사용할
refoutin수 없습니다. - CS9110: 인스턴스 멤버 내에 ref와 유사한 형식이 있는 기본 생성자 매개 변수를 사용할 수 없습니다.
- CS9136: 인스턴스 멤버 내에서 형식의 기본 생성자 매개 변수를 사용할 수 없습니다.
이러한 오류를 해결하려면 다음을 수행합니다.
- 형식의
ref struct기본 생성자 매개 변수에는 사용할 수 있는 위치에 대한 제한이 있습니다. 매개 변수 액세스를 람다 식, 쿼리 식 또는 로컬 함수(CS9108)에서 이동합니다. 그렇지 않은ref struct형식에서는 인스턴스 멤버(ref struct, CS9136)가 아닌 필드 이니셜라이저 또는 생성자 본문에서만 매개 변수에 액세스 합니다. - 타입
ref struct의 경우, 인스턴스 메서드나in속성 접근자에ref,out한정자를 포함한 기본 생성자 매개 변수를 사용할 수 없습니다. 매개 변수 값을 생성자의 필드에 복사하고 대신 인스턴스 멤버에서 해당 필드를 사용합니다(CS9109).
구조체 형식 제한
- CS9111: 구조체의 인스턴스 멤버 내 익명 메서드, 람다 식, 쿼리 식 및 로컬 함수는 기본 생성자 매개 변수에 액세스할 수 없습니다.
- CS9112: 구조체 내의 익명 메서드, 람다 식, 쿼리 식 및 로컬 함수는 인스턴스 멤버 내에서도 사용되는 기본 생성자 매개 변수에 액세스할 수 없습니다.
- CS9120: 참조로 기본 생성자 매개 변수를 반환할 수 없습니다.
- CS9121: 형식의 구조체 기본 생성자 매개 변수로 인해 구조체 레이아웃의 주기가 발생합니다.
이러한 오류를 해결하려면 다음을 수행합니다.
- 구조체 형식에서는 인스턴스 멤버 내의 람다 식, 쿼리 식 또는 로컬 함수에서 기본 생성자 매개 변수를 캡처할 수 없습니다. 이러한 컨텍스트에서 사용하기 전에 매개 변수를 지역 변수 또는 필드에 복사합니다(CS9111, CS9112).
- 구조체 형식의 참조로는 기본 생성자 매개 변수를 반환할 수 없습니다. 필드에 값을 저장하고 필요한 경우 참조로 해당 필드를 반환합니다(CS9120).
- 기본 생성자 매개 변수의 형식이 구조체 레이아웃에서 주기를 만들지 않는지 확인합니다. 구조체는 직접 또는 간접적으로 고유한 형식의 필드를 포함할 수 없습니다(CS9121).
읽기 전용 구조체 제한
- CS9114: 읽기 전용 형식의 기본 생성자 매개 변수는 할당할 수 없습니다(형식의 초기화 전용 설정자나 변수 이니셜라이저에서는 예외).
- CS9115: 읽기 전용 형식의 기본 생성자 매개 변수는 쓰기 가능한 참조로 반환할 수 없습니다.
-
CS9116: 읽기 전용 타입의 기본 생성자 매개변수는
ref또는out값으로 사용할 수 없습니다(초기화 전용 설정자 또는 변수 초기화는 예외입니다). - CS9117: 읽기 전용 형식의 기본 생성자 매개 변수의 멤버는 수정할 수 없습니다(초기 설정 전용 setter 또는 변수 초기자에서만 수정 가능).
- CS9118: 읽기 전용 형식의 기본 생성자 매개 변수의 멤버는 쓰기 가능 참조로 반환할 수 없습니다.
-
CS9119: 읽기 전용 유형의 기본 생성자 매개 변수 멤버를
ref또는out값으로 사용할 수 없습니다(초기화 전용 setter 또는 변수 초기화자를 제외하고).
이러한 오류를 해결하려면 다음을 수행합니다.
- 형식에서는
readonly structinit 전용 설정자 또는 변수 이니셔라이저 외부에서 주요 생성자 매개 변수와 그 멤버를 수정할 수 없습니다. 할당을 필드 이니셜라이저 또는 init 전용 속성 setter(CS9114, CS9117)로 이동합니다. - 형식에서 쓰기 가능한 참조를 사용하여 기본 생성자 매개 변수 및 해당 멤버를
readonly struct반환할 수 없습니다. 값이 아니라readonly ref로 반환하거나 값으로 반환하십시오(CS9115, CS9118). - 기본 생성자 매개 변수와 그 멤버를
ref또는out인수로readonly struct형식에 전달할 수 없습니다. 대신 값 또는 인수로in전달합니다(CS9116, CS9119).
캡처된 매개 변수 및 그림자 매개 변수에 대한 경고
- CS9107: 매개 변수가 바깥쪽 형식의 상태로 캡처되고 해당 값도 기본 생성자에 전달됩니다. 기본 클래스에서도 값을 캡처할 수 있습니다.
- CS9113: 매개 변수를 읽지 않았습니다.
- CS9124: 매개 변수는 바깥쪽 형식의 상태로 캡처되며 해당 값은 필드, 속성 또는 이벤트를 초기화하는 데도 사용됩니다.
- CS9179: 기본 생성자 매개 변수는 기본 멤버에 의해 숨깁니다.
다음 경고는 기본 생성자 매개 변수를 저장하거나 액세스하는 방법에 대한 잠재적인 문제를 나타냅니다.
- 매개 변수를 기본 생성자에 전달하고 파생 형식으로 액세스하는 경우 매개 변수를 두 번 저장할 수 있습니다. 기본 클래스에 복사본이 하나 있고 파생 클래스에 복사본이 하나 있을 수 있습니다. 두 복사본이 모두 필요한지 또는 중복을 방지하기 위해 코드를 재구성해야 하는지 고려합니다(CS9107).
- 기본 생성자 매개 변수를 읽지 않는 경우 기본 생성자 매개 변수가 필요하지 않습니다. 기본 생성자 선언(CS9113)에서 사용되지 않는 매개 변수를 제거합니다.
- 둘러싸는 형식에 매개 변수를 포함하고 그것을 필드, 속성 또는 이벤트를 초기화하는 데 사용하면 매개 변수를 두 번 저장할 수 있습니다. 별도의 멤버를 초기화하는 대신 캡처된 매개 변수를 직접 사용하는 것이 좋습니다(CS9124).
- 기본 형식 멤버는 둘 다 이름이 같을 때 기본 생성자 매개 변수를 숨깁니다. 혼동을 방지하기 위해 매개 변수 이름을 바꿉니다(CS9179).
.NET