이 문서에서는 다음과 같은 컴파일러 오류를 다룹니다.
- CS0034 - 연산자는 '
type1
' 및 'type2
' 형식의 피연산자에서 모호합니다. - CS0035 - 연산자가 모호하여 'type' 형식의 피연산자에 사용할 수 없습니다.
- CS0111 - Type은 이미 동일한 매개 변수 유형을 가진 'name'이라는 멤버를 정의합니다
- CS0121 - : 다음 메서드 또는 속성 간에 호출이 모호합니다.
- CS0457 - 'type1'에서 'type2'로 변환할 때 모호한 사용자 정의 변환
- CS0663 -
ref
및out
만 다른 오버로드된 메서드를 정의할 수 없습니다. - CS1007 - 속성 접근자가 이미 정의되었습니다
- CS1019 - 오버로드할 수 있는 단항 연산자가 필요합니다
- CS1020 - 오버로드할 수 있는 이항 연산자가 필요합니다
- CS1501 - 'number'개의 인수를 사용하는 'method' 메서드에 대한 오버로드가 없습니다
- CS1534 - 오버로드된 'operator' 이항 연산자는 매개 변수를 두 개 사용합니다
- CS1535 - 오버로드된 'operator' 단항 연산자는 매개 변수를 한 개 사용합니다
- CS1928 - 'Type'에 'method'에 대한 정의가 없으며 가장 적합한 확장 메서드 오버로드 'method'에 잘못된 인수가 있습니다.
- CS1929 - 'TypeA'에는 'method'에 대한 정의가 포함되어 있지 않으며 최상의 확장 메서드 오버로드 'TypeB.method'에는 'TypeC' 형식의 수신기가 필요합니다.
- CS8315 - 연산자가 피연산자에서 모호합니다
- CS9261 - 재정의 멤버에서 '
OverloadResolutionPriorityAttribute
'를 사용할 수 없습니다. - CS9262 - 는 이 멤버에서 '
OverloadResolutionPriorityAttribute
'을 사용할 수 없습니다.
또한 다음 컴파일러 경고:
- CS3006 -
ref
또는out
배열 차수만 다른 오버로드된 'method' 메서드는 CLS 규격이 아닙니다
잘못된 오버로드 정의
- CS0663 -
ref
및out
만 다른 오버로드된 메서드를 정의할 수 없습니다. - CS1019 - 오버로드할 수 있는 단항 연산자가 필요합니다
- CS1020 - 오버로드할 수 있는 이항 연산자가 필요합니다
- CS1534 - 오버로드된 'operator' 이항 연산자는 매개 변수를 두 개 사용합니다
- CS1535 - 오버로드된 'operator' 단항 연산자는 매개 변수를 한 개 사용합니다.
또한 다음 컴파일러 경고:
- CS3006 -
ref
또는out
배열 차수만 다른 오버로드된 'method' 메서드는 CLS 규격이 아닙니다
클래스에서 오버로드된 연산자를 생성할 때 서명은 해당 연산자에 필요한 매개변수 수와 일치해야 합니다. 연산자 정의에 잘못된 매개변수 수가 있습니다.
또한 오버로드 연산자는 정의된 연산자 이름을 사용해야 합니다. 유일한 예외는 변환 연산자를 만드는 경우입니다. 여기서 연산자 이름은 변환의 반환 형식과 일치합니다.
중복 오버로드 정의됨
- CS0111 - Type은 이미 동일한 매개 변수 유형을 가진 'name'이라는 멤버를 정의합니다
- CS1007 - 속성 접근자가 이미 정의되었습니다
이러한 오류는 다르지 않은 오버로드를 만들었음을 나타냅니다. 일반적인 이유는 다음과 같습니다.
- 일치하는 매개 변수 형식에는 ID 변환이 있습니다. 예를 들어
M(dynamic)
및M(object)
또는M2(string)
및M2(string?)
입니다. - 일치하는 매개 변수 형식은 참조 한정자에서만 다릅니다. 예를 들어
M(ref int)
및M(out int)
를 지정합니다. - 속성에 대한
init
접근자와set
접근자를 모두 포함했습니다.
오버로드를 찾을 수 없음
- CS1501 - 'number'개의 인수를 사용하는 'method' 메서드에 대한 오버로드가 없습니다
- CS1928 - 'Type'에 'method'에 대한 정의가 없으며 가장 적합한 확장 메서드 오버로드 'method'에 잘못된 인수가 있습니다.
- CS1929 - 'TypeA'에는 'method'에 대한 정의가 포함되어 있지 않으며 최상의 확장 메서드 오버로드 'TypeB.method'에는 'TypeC' 형식의 수신기가 필요합니다
코드에서 이름이 존재하지만 일부 인수가 올바르지 않거나 잘못된 인수를 사용한 메서드를 호출합니다. 확장 메서드를 호출하려는 경우 포함 클래스가 가져올 수 없는 네임스페이스에 있을 수 있습니다.
참고 항목
오류 CS1928
은(는) 최신 컴파일러에서 사용되지 않습니다. 최신 컴파일러는 CS1929
을(를) 단독으로 사용합니다.
모호한 오버로드
- CS0034 - 연산자는 '
type1
' 및 'type2
' 형식의 피연산자에서 모호합니다 - CS0035 - 연산자가 모호하여 'type' 형식의 피연산자에 사용할 수 없습니다
- CS0121 - 다음 메서드 또는 속성 간에 호출이 모호합니다
- CS0457 - 'type1'에서 'type2'로 변환할 때 모호한 사용자 정의 변환
- CS8315 - 연산자가 피연산자에서 모호합니다
이러한 오류는 다른 오버로드보다 더 나은 오버로드가 없음을 나타냅니다. 이러한 오류는 다음 몇 가지 원인으로 인해 발생할 수 있습니다.
각 매개변수마다 다른 인수를 사용하는 것이 좋습니다. 하나는 정확히 일치할 수 있고 다른 하나는 변환이 필요할 수 있습니다.
void M(int a, double b) { } void M(double a, int b) {} M(1, 1); // ambiguous
여러 사용자 정의 변환 연산자가 후보입니다. 변환 연산자는 소스 유형, 기본 유형, 대상 유형 또는 기본 유형으로 선언할 수 있습니다. 변환 연산자가 두 개 이상 정의된 경우 컴파일러가 선택할 수 없습니다.
여러 변환 연산자가 호환 가능한 변환을 수행할 수 있습니다.
하나 이상의 인수가
default
을(를) 사용하며(default(T)
아님) 여러 형식을 선택할 수 있습니다.
이러한 경우 대부분 명시적 캐스트를 추가하면 어떤 과부하를 선택해야 하는지 지정할 수 있습니다.
오버로드 확인 우선 순위
- CS9261 - 재정의 멤버에서 '
OverloadResolutionPriorityAttribute
'를 사용할 수 없습니다. - CS9262 - 는 이 멤버에서 '
OverloadResolutionPriorityAttribute
'을 사용할 수 없습니다.
코드가 다른 오버로드 대신 하나의 오버로드를 선호하는 데 OverloadResolutionPriorityAttribute을(를) 사용하는 규칙을 위반했습니다. 다음 메서드 형식에는 OverloadResolutionPriorityAttribute
을(를) 적용할 수 없습니다.
- 논인덱서 속성
- 속성, 인덱서 또는 이벤트 접근자
- 변환 연산자
- 람다
- 로컬 함수
- 종료자
- 정적 생성자
또한 virtual
또는 abstract
멤버의 override
에는 OverloadResolutionPriorityAttribute
을(를) 적용할 수 없습니다. 컴파일러는 기본 형식 선언의 값을 사용합니다.
.NET