Sdílet prostřednictvím


Chyby a upozornění související s metodami rozšíření deklarovanými s this parametry nebo extension bloky

  • CS1100: Metoda má modifikátor parametru 'this', který není u prvního parametru.
  • CS1101: Modifikátor parametru 'ref' nelze použít s 'this'.
  • CS1102: Modifikátor parametru 'out' nelze použít s 'this'.
  • CS1103: První parametr metody rozšíření nemůže být typu ukazatele.
  • CS1105: Rozšiřující metody musí být statické.
  • CS1106: Rozšiřující metody musí být definovány v ne generické statické třídě.
  • CS1109: Rozšiřující metody musí být definovány ve statických třídách nejvyšší úrovně, "name" je vnořená třída.
  • CS1110: Nelze definovat nové rozšíření, protože požadovaný typ ExtensionAttribute kompilátoru nebyl nalezen. Chybí vám odkaz na System.Core.dll?
  • CS1112: Nepoužívejte 'ExtensionAttribute'. Místo toho použijte klíčové slovo 'this'.
  • CS1113: Rozšiřující metoda definovaná pro typ hodnoty nelze použít k vytvoření delegátů.
  • CS1743: Nelze zadat výchozí hodnotu parametru "this".
  • CS9281: Deklarace rozšíření nemusí mít název.
  • CS9282: Deklarace rozšíření mohou obsahovat pouze metody nebo vlastnosti.
  • CS9283: Rozšíření musí být deklarována v statické třídě nejvyšší úrovně, která není obecná.
  • CS9284: Parametr příjemce rozšíření nemůže mít výchozí hodnotu.
  • CS9285: Kontejner rozšíření může mít pouze jeden parametr příjemce.
  • CS9287: Parametr příjemce nemůže mít stejný název jako parametr typu kontejneru rozšíření.
  • CS9288: Parametr, místní proměnná nebo místní funkce nesmí mít stejný název jako parametr typu kontejneru rozšíření.
  • CS9289: Parametr typu člena má stejný název jako parametr typu kontejneru rozšíření.
  • CS9290: Parametr, místní proměnná nebo místní funkce nesmí mít stejný název jako parametr rozšíření.
  • CS9291: valueAutomaticky vygenerovaný název parametru je v konfliktu s názvem parametru rozšíření.
  • CS9292: Parametr typu má stejný název jako parametr rozšíření.
  • CS9293: V tomto kontextu nelze použít parametr rozšíření.
  • CS9294: 'value': Automaticky vygenerovaný název parametru koliduje s názvem parametru typu rozšíření.
  • CS9295: Rozšířený typ musí odkazovat na všechny parametry typu deklarované rozšířením, ale parametr typu není odkazován.
  • CS9300: Parametr 'ref' přijímače rozšiřujícího bloku musí být hodnotový typ nebo obecný typ omezený na strukturu.
  • CS9301: 'in' nebo 'ref readonly' parametr přijímače rozšíření musí být konkrétní (ne generický) typ hodnoty.
  • CS9302: Nový chráněný člen deklarovaný v bloku rozšíření.
  • CS9303: Nelze deklarovat členy instance v bloku rozšíření s nepojmenovaným parametrem příjemce.
  • CS9304: V bloku rozšíření nelze deklarovat přístupové objekty jen pro inicializaci.
  • CS9305: Nelze použít modifikátory u nepojmenovaného parametru přijímače bloku rozšíření.

Běžné chyby u deklarací rozšíření

Kompilátor generuje tyto chyby při porušení pravidel, která se vztahují na všechny deklarace členů rozšíření bez ohledu na zvolenou syntaxi:

  • CS1102: Modifikátor parametru 'out' nelze použít s 'this'.
  • CS1106: Rozšiřující metody musí být definovány v ne generické statické třídě.
  • CS1103: První parametr metody rozšíření nemůže být typu ukazatele.
  • CS1109: Rozšiřující metody musí být definovány ve statických třídách nejvyšší úrovně, "name" je vnořená třída.
  • CS1113: Rozšiřující metoda definovaná pro typ hodnoty nelze použít k vytvoření delegátů.
  • CS1743: Nelze zadat výchozí hodnotu parametru "this".
  • CS9283: Rozšíření musí být deklarována v statické třídě nejvyšší úrovně, která není obecná.
  • CS9284: Parametr příjemce rozšíření nemůže mít výchozí hodnotu.
  • CS9285: Kontejner rozšíření může mít pouze jeden parametr příjemce.

Všechna deklarace rozšíření musí dodržovat tato pravidla:

  • Jeho obsahující typ (class nebo struct) musí být negenerický a static.
  • Jeho obsahující typ musí být typ nejvyšší úrovně. Nedá se vnořit do jiného typu.
  • Členy, které rozšiřují instanci typu hodnoty, nelze převádět na delegáty.
  • Parametr přijímače nemůže obsahovat modifikátor parametru out .
  • Parametr příjemce nemůže mít výchozí hodnotu argumentu.
  • Typy ukazatelů nelze rozšířit. Jinými slovy, parametr, na který použijete this modifikátor, nemůže být typ ukazatele.

Tyto chyby jsou specifické pro bloky rozšíření, funkci C# 14. Bloky rozšíření jsou deklarovány pomocí klíčového extension slova ve statické třídě. Deklaruje extension typ a název příjemce. Všichni členové deklarovaní v bloku s extension jsou členy rozšíření pro tohoto příjemce:

  • CS9281: Deklarace rozšíření nemusí mít název.
  • CS9282: Deklarace rozšíření mohou obsahovat pouze metody nebo vlastnosti.
  • CS9287: Parametr příjemce nemůže mít stejný název jako parametr typu kontejneru rozšíření.
  • CS9288: Parametr, místní proměnná nebo místní funkce nesmí mít stejný název jako parametr typu kontejneru rozšíření.
  • CS9289: Parametr typu člena má stejný název jako parametr typu kontejneru rozšíření.
  • CS9290: Parametr, místní proměnná nebo místní funkce nesmí mít stejný název jako parametr rozšíření.
  • CS9291: valueAutomaticky vygenerovaný název parametru je v konfliktu s názvem parametru rozšíření.
  • CS9292: Parametr typu má stejný název jako parametr rozšíření.
  • CS9293: V tomto kontextu nelze použít parametr rozšíření.
  • CS9294: 'value': Automaticky vygenerovaný název parametru koliduje s názvem parametru typu rozšíření.
  • CS9295: Rozšířený typ musí odkazovat na všechny parametry typu deklarované rozšířením, ale parametr typu není odkazován.
  • CS9300: Parametrref příjemce bloku rozšíření musí být typ hodnoty nebo obecný typ omezený na strukturu.
  • CS9301: Parametr přijímače 'in' nebo 'ref readonly' rozšíření musí být konkrétní (ne generický) pevný typ hodnoty.
  • CS9302: Nový chráněný člen deklarovaný v bloku rozšíření.
  • CS9303: Nelze deklarovat členy instance v bloku rozšíření s nepojmenovaným parametrem příjemce.
  • CS9304: V bloku rozšíření nelze deklarovat přístupové objekty jen pro inicializaci.
  • CS9305: Nelze použít modifikátory u nepojmenovaného parametru přijímače bloku rozšíření.

Deklarace rozšíření musí dodržovat tato pravidla:

  • Rozšíření nesmí obsahovat názevový token. Externí modul deklaruje jenom příjemce.
  • Parametr příjemce nemůže mít výchozí hodnotu.

Členové deklarovaní v rozšíření musí kromě společných pravidel dodržovat tato pravidla:

  • Platné typy členů rozšíření jsou pouze metody a vlastnosti. Členové rozšíření mohou rozšířit instanci nebo typ.
  • Rozšíření musí poskytnout název parametru pro příjemce, aby bylo možné obsahovat členy, které rozšiřují instanci.
  • Název parametru příjemce musí být v daném bloku rozšíření jedinečný.
  • Všichni členové rozšíření musí používat všechny parametry typu deklarované v rozšíření. Můžou přidat další parametry typu.

Tyto chyby jsou specifické pro rozšiřující metody, kde deklarujete příjemce přidáním this modifikátoru do prvního parametru metody:

  • CS1100: Metoda má modifikátor parametru 'this', který není u prvního parametru.
  • CS1101: Modifikátor parametru 'ref' nelze použít s 'this'.
  • CS1105: Rozšiřující metody musí být statické.
  • CS1110: Nelze definovat nové rozšíření, protože požadovaný typ ExtensionAttribute kompilátoru nebyl nalezen. Chybí vám odkaz na System.Core.dll?
  • CS1112: Nepoužívejte 'ExtensionAttribute'. Místo toho použijte klíčové slovo 'this'.

Rozšiřující metoda, kde instance příjemce obsahuje this modifikátor, musí kromě běžných pravidel dodržovat tato pravidla:

  • Metoda musí mít static modifikátor.
  • Modifikátor parametru this musí být použit u prvního parametru. Nedá se použít na žádné další parametry metody.
  • ref out Modifikátor parametru nelze použít u prvního parametru. Chcete-li použít ref, je třeba převést ho na blok rozšíření.
  • V aplikacích .NET Framework je nutné přidat System.Core.dll jako referenci.
  • U prvního parametru this je nutné zadat modifikátor. Nemůžete místo toho přímo použít atribut ExtensionAttribute.