Sdílet prostřednictvím


Vyřešte chyby a upozornění, která mají vliv na řešení přetížení.

Tento článek se zabývá následujícími chybami kompilátoru:

  • Operátor CS0034 je nejednoznačný na operandech typu 'type1' a 'type2' -
  • Operátor CS0035 - je nejednoznačný na operandu typu "type"
  • CS0111 - Typ již definuje člen s názvem "name" se stejnými typy parametrů.
  • CS0121 - Volání je nejednoznačné mezi následujícími metodami nebo vlastnostmi.
  • CS0457 - Nejednoznačné uživatelem definované převody při převodu z 'type1' na 'type2'
  • CS0663 - Nelze definovat přetížené metody, které se liší pouze na ref a out.
  • Objekt vlastnosti CS1007 - je již definovaný
  • CS1019 - – nepřetížitelný unární operátor byl očekáván
  • Byl očekáván binární operátor CS1020 - Přetížitelný
  • CS1501 - Bez přetížení metody method přebírá argumenty number
  • CS1534 - Přetížený binární operátor "operator" přebírá dva parametry
  • CS1535 - Přetížení unární operátor 'operator' přebírá jeden parametr
  • CS1928'Type - ' neobsahuje definici metody a nejlepší přetížení metody rozšíření 'method' má některé neplatné argumenty.
  • CS1929 - TypeA neobsahuje definici metody a nejlepší přetížení metody rozšíření TypeB.method vyžaduje příjemce typu TypeC.
  • Operátor CS8315 - je nejednoznačný na operandech
  • CS9261 - Nelze použít 'OverloadResolutionPriorityAttribute' u přepsání členu.
  • CS9262 - Nelze použít 'OverloadResolutionPriorityAttribute' u tohoto člena.

Kromě toho platí následující upozornění kompilátoru:

  • Metoda CS3006 - Přetížená metoda "method" se liší pouze v ref nebo outnebo v maticových pořadích, není kompatibilní se specifikací CLS.

Nesprávná definice přetížení

  • CS0663 - Nelze definovat přetížené metody, které se liší pouze na ref a out.
  • CS1019 - – nepřetížitelný unární operátor byl očekáván
  • Byl očekáván binární operátor CS1020 - Přetížitelný
  • CS1534 - Přetížený binární operátor "operator" přebírá dva parametry
  • CS1535 - Přetížení unární operátor 'operator' přebírá jeden parametr

Kromě toho platí následující upozornění kompilátoru:

  • Metoda CS3006 - Přetížená metoda "method" se liší pouze v ref nebo outnebo v maticových pořadích, není kompatibilní se specifikací CLS.

Při vytváření přetížených operátorů ve třídě musí podpis odpovídat počtu parametrů požadovaných pro tento operátor. V definici operátoru máte nesprávný počet parametrů.

Kromě toho musí operátory přetížení používat definovaný název operátoru. Jedinou výjimkou je vytvoření operátoru převodu, kde název operátoru odpovídá návratovém typu převodu.

Definované duplicitní přetížení

  • CS0111 - Typ již definuje člen s názvem "name" se stejnými typy parametrů.
  • Objekt vlastnosti CS1007 - je již definovaný

Tyto chyby značí, že jste vytvořili přetížení, která se neliší. Mezi obecné důvody patří:

  • Odpovídající typy parametrů mají převod identity. Například M(dynamic) a M(object), nebo M2(string) a M2(string?).
  • Odpovídající typy parametrů se liší pouze v modifikátoru odkazu. Příklad: M(ref int) a M(out int).
  • Zahrnuli jste objekt i init set příslušenství pro vlastnost.

Nenašlo se žádné přetížení.

  • CS1501 - Bez přetížení metody method přebírá argumenty number
  • CS1928'Type - ' neobsahuje definici metody a nejlepší přetížení metody rozšíření 'method' má některé neplatné argumenty.
  • CS1929 - TypeA neobsahuje definici metody a nejlepší přetížení metody rozšíření TypeB.method vyžaduje příjemce typu TypeC.

Váš kód volá metodu, kde název existuje, ale některé argumenty jsou nesprávné nebo jste použili nesprávný počet argumentů. Pokud se pokoušíte volat metodu rozšíření, může být obsahující třída v oboru názvů, který není importován.

Poznámka:

Nejnovější kompilátory nepoužívají chybu CS1928 . Novější kompilátory používají CS1929 výhradně.

Nejednoznačné přetížení

  • Operátor CS0034 - je nejednoznačný na operandech typu 'type1' a 'type2'
  • Operátor CS0035 - je nejednoznačný na operandu typu "type"
  • CS0121 - Volání je nejednoznačné mezi následujícími metodami nebo vlastnostmi.
  • CS0457 - Nejednoznačné uživatelem definované převody při převodu z 'type1' na 'type2'
  • Operátor CS8315 - je nejednoznačný na operandech

Tyto chyby značí, že neexistuje jedno lepší přetížení než jiné. K těmto chybám může dojít z několika možných příčin:

  • Pro každý parametr jsou lepší různé argumenty. Jedna může být přesná shoda a druhá vyžaduje převod:

      void M(int a, double b) {    }
      void M(double a, int b) {}
    
      M(1, 1); // ambiguous
    
  • Mezi kandidáty patří více operátorů převodu definovaných uživatelem. Operátory převodu lze deklarovat ve zdrojovém typu, jeho základních typech, cílovém typu nebo v základních typech. Pokud byl operátor převodu definován ve více než jednom, kompilátor nemůže vybrat.

  • Převod by mohl provést více operátorů převodu.

  • Jeden nebo více argumentů používá default (ne default(T)) a lze zvolit více typů.

Ve většině těchto případů může přidání explicitního přetypování určit, které přetížení se má zvolit.

Priorita rozlišení přetížení

  • CS9261 - Nelze použít 'OverloadResolutionPriorityAttribute' u přepsání členu.
  • CS9262 - Nelze použít 'OverloadResolutionPriorityAttribute' u tohoto člena.

Váš kód porušil pravidla pro použití OverloadResolutionPriorityAttribute k upřednostnění jednoho přetížení místo jiného. Nemůžete použít OverloadResolutionPriorityAttribute následující typy metod:

  • Vlastnosti jiného indexeru
  • Vlastnosti, indexer nebo přístupové objekty událostí
  • Operátory převodu
  • Lambda
  • Lokální funkce
  • Finalizační metody
  • Statické konstruktory

Kromě toho nemůžete použít OverloadResolutionPriorityAttribute u override některého člena ani abstract členavirtual. Kompilátor používá hodnotu z deklarace základního typu.