Los fouten en waarschuwingen op die van invloed zijn op overbelastingsresolutie.
In dit artikel worden de volgende compilerfouten behandeld:
- CS0034 Operator is ambigu voor operanden van het type '
type1
' en 'type2
' - - CS0035 - Operator is dubbelzinnig op een operand van het type 'type'
- CS0111 - Type definieert al een lid met de naam 'name' met dezelfde parametertypen
- CS0121 - De aanroep is dubbelzinnig tussen de volgende methoden of eigenschappen
- Cs0457 - Ambigu door de gebruiker gedefinieerde conversies bij het converteren van 'type1' naar 'type2'
- CS0663 - Kan overbelaste methoden niet definiëren die alleen verschillen op
ref
enout
. - CS1007 - Property accessor already defined
- Cs1019 - Overloadable unary operator verwacht
- Cs1020 - Overbelastingsbare binaire operator verwacht
- CS1501 - No overload for method 'method' takes 'number' argumenten
- CS1534 - Overloaded binary operator 'operator' accepteert twee parameters
- CS1535 - Overloaded unary operator 'operator' neemt één parameter
- CS1928'Type - ' bevat geen definitie voor 'methode' en de beste uitbreidingsmethode overbelasting 'methode' heeft een aantal ongeldige argumenten.
- CS1929'TypeA - ' bevat geen definitie voor 'methode' en de beste uitbreidingsmethode overbelast 'TypeB.method' vereist een ontvanger van het type 'TypeC'
- CS8315 - Operator is ambigu voor operanden
- CS9261 - Kan '' niet gebruiken
OverloadResolutionPriorityAttribute
voor een overschrijvend lid. - CS9262 - Kan '' niet gebruiken
OverloadResolutionPriorityAttribute
voor dit lid.
Daarnaast wordt de volgende compilerwaarschuwing weergegeven:
- CS3006 - Overloaded method 'method' differenting only in
ref
orout
, or in array rank, is not CLS-compatibel
Onjuiste overbelastingsdefinitie
- CS0663 - Kan overbelaste methoden niet definiëren die alleen verschillen op
ref
enout
. - Cs1019 - Overloadable unary operator verwacht
- Cs1020 - Overbelastingsbare binaire operator verwacht
- CS1534 - Overloaded binary operator 'operator' accepteert twee parameters
- CS1535 - Overloaded unary operator 'operator' neemt één parameter
Daarnaast wordt de volgende compilerwaarschuwing weergegeven:
- CS3006 - Overloaded method 'method' differenting only in
ref
orout
, or in array rank, is not CLS-compatibel
Wanneer u overbelaste operators in uw klasse maakt, moet de handtekening overeenkomen met het aantal parameters dat voor die operator is vereist. U hebt het verkeerde aantal parameters in de operatordefinitie.
Bovendien moeten overbelastingsoperators de naam van de gedefinieerde operator gebruiken. De enige uitzondering is wanneer u een conversieoperator maakt, waarbij de operatornaam overeenkomt met het retourtype van de conversie.
Dubbele overbelastingen gedefinieerd
- CS0111 - Type definieert al een lid met de naam 'name' met dezelfde parametertypen
- CS1007 - Property accessor already defined
Deze fouten geven aan dat u overbelastingen hebt gemaakt die niet verschillen. Veelvoorkomende redenen zijn onder meer:
- De overeenkomende parametertypen hebben een identiteitsconversie. Bijvoorbeeld
M(dynamic)
enM(object)
, ofM2(string)
enM2(string?)
. - De overeenkomende parametertypen verschillen alleen in verwijzingsaanpassing. Bijvoorbeeld
M(ref int)
enM(out int)
. - U hebt zowel een
init
als eenset
accessor voor een eigenschap opgenomen.
Geen overbelasting gevonden
- CS1501 - No overload for method 'method' takes 'number' argumenten
- CS1928'Type - ' bevat geen definitie voor 'methode' en de beste uitbreidingsmethode overbelasting 'methode' heeft een aantal ongeldige argumenten.
- CS1929'TypeA - ' bevat geen definitie voor 'methode' en de beste uitbreidingsmethode overbelast 'TypeB.method' vereist een ontvanger van het type 'TypeC'
Uw code roept een methode aan waarin de naam bestaat, maar sommige argumenten zijn onjuist of u hebt het verkeerde aantal argumenten gebruikt. Als u een extensiemethode probeert aan te roepen, bevindt de betreffende klasse zich mogelijk in een naamruimte die niet wordt geïmporteerd.
Notitie
Fout CS1928
wordt niet gebruikt door de nieuwste compilers. Nieuwere compilers gebruiken CS1929
uitsluitend.
Dubbelzinnige overbelastingen
- CS0034 - Operator is ambigu voor operanden van het type '
type1
' en 'type2
' - CS0035 - Operator is dubbelzinnig op een operand van het type 'type'
- CS0121 - De aanroep is dubbelzinnig tussen de volgende methoden of eigenschappen
- Cs0457 - Ambigu door de gebruiker gedefinieerde conversies bij het converteren van 'type1' naar 'type2'
- CS8315 - Operator is ambigu voor operanden
Deze fouten geven aan dat er geen betere overbelasting is dan andere. Er zijn verschillende mogelijke oorzaken voor deze fouten:
Verschillende argumenten zijn beter voor elke parameter. Het ene kan een exacte overeenkomst zijn en de andere vereist een conversie:
void M(int a, double b) { } void M(double a, int b) {} M(1, 1); // ambiguous
Meerdere door de gebruiker gedefinieerde conversieoperators zijn kandidaten. Conversieoperators kunnen worden gedeclareerd in het brontype, de basistypen, het doeltype of de basistypen. Als er meer dan één conversieoperator is gedefinieerd, kan de compiler niet kiezen.
Meerdere conversieoperators kunnen een compatibele conversie uitvoeren.
Een of meer argumenten gebruiken
default
(nietdefault(T)
) en er kunnen meerdere typen worden gekozen.
In de meeste gevallen kan het toevoegen van een expliciete cast opgeven welke overbelasting moet worden gekozen.
Prioriteit van overbelastingsresolutie
- CS9261 - Kan '' niet gebruiken
OverloadResolutionPriorityAttribute
voor een overschrijvend lid. - CS9262 - Kan '' niet gebruiken
OverloadResolutionPriorityAttribute
voor dit lid.
Uw code heeft de regels geschonden voor het gebruik van de OverloadResolutionPriorityAttribute ene overbelasting in plaats van een andere. U kunt de OverloadResolutionPriorityAttribute
volgende methodetypen niet toepassen:
- Eigenschappen van niet-indexeerfunctie
- Eigenschap, indexeerfunctie of gebeurtenistoegangsors
- Conversieoperators
- Lambdas
- Lokale functies
- Finalizers
- Statische constructors
Bovendien kunt u de OverloadResolutionPriorityAttribute
toepassing niet toepassen op een override
virtual
abstract
of meer leden. De compiler gebruikt de waarde uit de declaratie van het basistype.