Delen via


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 en out.
  • 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 gebruikenOverloadResolutionPriorityAttribute voor een overschrijvend lid.
  • CS9262 - Kan '' niet gebruikenOverloadResolutionPriorityAttribute voor dit lid.

Daarnaast wordt de volgende compilerwaarschuwing weergegeven:

  • CS3006 - Overloaded method 'method' differenting only in ref or out, or in array rank, is not CLS-compatibel

Onjuiste overbelastingsdefinitie

  • CS0663 - Kan overbelaste methoden niet definiëren die alleen verschillen op ref en out.
  • 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 or out, 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) en M(object), of M2(string) en M2(string?).
  • De overeenkomende parametertypen verschillen alleen in verwijzingsaanpassing. Bijvoorbeeld M(ref int) en M(out int).
  • U hebt zowel een init als een set 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 (niet default(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 gebruikenOverloadResolutionPriorityAttribute voor een overschrijvend lid.
  • CS9262 - Kan '' niet gebruikenOverloadResolutionPriorityAttribute 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.