Olvasás angol nyelven

Megosztás a következőn keresztül:


A túlterhelés feloldását befolyásoló hibák és figyelmeztetések elhárítása.

Ez a cikk a következő fordítóhibákat ismerteti:

  • A CS0034 - operátor nem egyértelmű a "" éstype2 "type1" típusú operandusokon
  • A CS0035 - operátor nem egyértelmű egy "type" típusú operanduson
  • A CS0111 - Típus már definiál egy "name" nevű tagot ugyanazokkal a paramétertípusokkal
  • CS0121 - A hívás nem egyértelmű a következő módszerek vagy tulajdonságok között
  • CS0457 - Nem egyértelmű felhasználó által definiált konverziók az 1. típusról a "type2" típusra való konvertáláskor
  • A CS0663 Nem definiálható túlterhelt metódusok, amelyek csak a rendszeren és outa ref . -
  • A CS1007 - tulajdonság tartozéka már definiálva van
  • CS1019 - Túlterhelhető, nem várt operátor
  • CS1020 - Túlterhelhető bináris operátor várható
  • CS1501 - A metódus nem veszi figyelembe a "szám" argumentumokat
  • A CS1534 - túlterhelt bináris operátor "operátora" két paramétert vesz igénybe
  • A CS1535 - Túlterhelt nem ad operátor "operátor" egy paramétert
  • A CS1928 - "Type" nem tartalmaz "metódus" definíciót, és a legjobb bővítménymetódus túlterhelési metódusa érvénytelen argumentumokkal rendelkezik.
  • A CS1929 - "TypeA" nem tartalmaz "metódus" definíciót, és a legjobb "TypeB.method" kiterjesztési metódushoz "TypeC" típusú fogadó szükséges.
  • A CS8315 - operátor nem egyértelmű az operandusokon
  • A CS9261 - nem használható a "OverloadResolutionPriorityAttribute" parancsra egy felülíró tagon.
  • CS9262 - Nem használható a "OverloadResolutionPriorityAttribute" ezen a tagon.

Ezenkívül a következő fordító figyelmeztetése:

  • A CS3006 - túlterhelt metódus "metódusa", amely csak a tömbökben ref outvagy tömbök rangsorában különbözik, nem cls-kompatibilis

Helytelen túlterhelés definíciója

  • A CS0663 - Nem definiálható túlterhelt metódusok, amelyek csak a rendszeren és outa ref .
  • CS1019 - Túlterhelhető, nem várt operátor
  • CS1020 - Túlterhelhető bináris operátor várható
  • A CS1534 - túlterhelt bináris operátor "operátora" két paramétert vesz igénybe
  • A CS1535 - Túlterhelt nem ad operátor "operátor" egy paramétert

Ezenkívül a következő fordító figyelmeztetése:

  • A CS3006 - túlterhelt metódus "metódusa", amely csak a tömbökben ref outvagy tömbök rangsorában különbözik, nem cls-kompatibilis

Ha túlterhelt operátorokat hoz létre az osztályban, az aláírásnak meg kell egyeznie az adott operátorhoz szükséges paraméterek számával. Helytelen számú paraméter szerepel az operátor definíciójában.

Emellett a túlterhelési operátoroknak a megadott operátornevet kell használniuk. Az egyetlen kivétel egy konverziós operátor létrehozásakor van, ahol az operátor neve megegyezik az átalakítás visszatérési típusával.

Ismétlődő túlterhelések definiálva

  • A CS0111 - Típus már definiál egy "name" nevű tagot ugyanazokkal a paramétertípusokkal
  • A CS1007 - tulajdonság tartozéka már definiálva van

Ezek a hibák azt jelzik, hogy olyan túlterheléseket hozott létre, amelyek nem különböznek egymástól. Gyakori okok például:

  • Az egyező paramétertípusok identitáskonvertálással rendelkeznek. Például M(dynamic) és M(object), vagy M2(string) és M2(string?).
  • Az egyező paramétertípusok csak a referencia-módosítóban különböznek. Például: M(ref int) és M(out int).
  • Egy tulajdonsághoz init egy és egy set kiegészítőt is tartalmazott.

Nem található túlterhelés

  • CS1501 - A metódus nem veszi figyelembe a "szám" argumentumokat
  • A CS1928 - "Type" nem tartalmaz "metódus" definíciót, és a legjobb bővítménymetódus túlterhelési metódusa érvénytelen argumentumokkal rendelkezik.
  • A CS1929 - "TypeA" nem tartalmaz "metódus" definíciót, és a legjobb "TypeB.method" kiterjesztési metódushoz "TypeC" típusú fogadó szükséges.

A kód meghív egy metódust, ahol a név létezik, de egyes argumentumok helytelenek, vagy helytelen számú argumentumot használt. Ha egy bővítménymetódust próbál meghívni, előfordulhat, hogy a benne lévő osztály nem importált névtérben van.

Megjegyzés

A legújabb fordítók nem használnak hibát CS1928 . Az újabb fordítók kizárólag azokat használják CS1929 .

Nem egyértelmű túlterhelések

  • A CS0034 - operátor nem egyértelmű a "" éstype2 "type1" típusú operandusokon
  • A CS0035 - operátor nem egyértelmű egy "type" típusú operanduson
  • CS0121 - A hívás nem egyértelmű a következő módszerek vagy tulajdonságok között
  • CS0457 - Nem egyértelmű felhasználó által definiált konverziók az 1. típusról a "type2" típusra való konvertáláskor
  • A CS8315 - operátor nem egyértelmű az operandusokon

Ezek a hibák azt jelzik, hogy nincs jobb túlterhelés, mint mások. A hibáknak több oka is lehet:

  • A különböző argumentumok jobbak az egyes paramétereknél. Az egyik pontos egyezés lehet, a másik pedig átalakítást igényel:

    C#
      void M(int a, double b) {    }
      void M(double a, int b) {}
    
      M(1, 1); // ambiguous
    
  • Több felhasználó által definiált konverziós operátor is jelölt. A konverziós operátorok deklarálhatók a forrástípusban, az alaptípusban, a céltípusban vagy az alaptípusban. Ha egy konverziós operátor egynél többben van definiálva, a fordító nem tud választani.

  • Több konverziós operátor is végrehajthat egy kompatibilis átalakítást.

  • Egy vagy több argumentumot használ default (nem default(T)) és több típus is kiválasztható.

A legtöbb esetben explicit leadás hozzáadásával megadhatja, hogy melyik túlterhelést kell választani.

Túlterhelésfeloldási prioritás

  • A CS9261 - nem használható a "OverloadResolutionPriorityAttribute" parancsra egy felülíró tagon.
  • CS9262 - Nem használható a "OverloadResolutionPriorityAttribute" ezen a tagon.

A kód megsértette azokat a szabályokat, hogy az OverloadResolutionPriorityAttribute egyik túlterhelést részesítse előnyben a másik helyett. A következő metódustípusokra nem alkalmazható OverloadResolutionPriorityAttribute :

  • Nem indexelő tulajdonságok
  • Tulajdonság-, indexelő- vagy eseménykiegészítők
  • Konverziós operátorok
  • Lambdas
  • Helyi függvények
  • Döntősök
  • Statikus konstruktorok

Ezenkívül nem alkalmazhatja azt OverloadResolutionPriorityAttribute egy vagy abstract több override tagravirtual. A fordító az alaptípus-deklaráció értékét használja.