Sdílet prostřednictvím


Chyby a upozornění související s partial deklaracemi typů a partial členů

Existuje mnoho chyb souvisejících s partial deklaracemi typu a partial člena:

  • CS0260: Chybí částečný modifikátor deklarace typu; existuje další částečná deklarace tohoto typu.
  • CS0261: Částečné deklarace typu musí být všechny třídy, všechny struktury nebo všechna rozhraní
  • CS0262: Částečné deklarace typu mají konfliktní modifikátory přístupnosti
  • CS0263: Částečné deklarace typu nesmí určovat různé základní třídy
  • CS0264: Částečné deklarace typu musí mít stejné názvy parametrů typu ve stejném pořadí.
  • CS0265: Částečné deklarace typu mají nekonzistentní omezení pro parametr type 'type parameter'
  • CS0267: Modifikátor 'partial' se může objevit pouze bezprostředně před 'class', 'record', 'struct', 'interface' nebo metodou nebo návratovým typem vlastnosti.
  • CS0282: Není definováno řazení mezi poli v několika deklarací částečné třídy nebo struktury 'type'. Chcete-li zadat řazení, musí být všechna pole instance ve stejné deklaraci.
  • CS0501: Členová funkce musí deklarovat tělo, protože není označeno abstract, externnebo partial
  • CS0750: Částečný člen nemůže mít modifikátor 'abstract'.
  • CS0751: Částečný člen musí být deklarován v částečném class nebo částečném struct
  • CS0754: Částečný člen nemusí explicitně implementovat metodu rozhraní.
  • CS0755: Obě částečné deklarace metody musí být rozšiřující metody, nebo ani jedna z nich nemůže být rozšiřující metoda.
  • CS0756: Částečná metoda nemusí mít více definic deklarací.
  • CS0757: Částečná metoda nemusí mít více implementací deklarací.
  • CS0759: Nebyla nalezena žádná definice deklarace pro implementaci deklarace částečné metody.
  • CS0761: Částečné deklarace method<T> metody mají nekonzistentní omezení parametrů typu.
  • CS0762: Nelze vytvořit delegáta z metody, protože se jedná o částečnou metodu bez implementace deklarace
  • CS0763: Obě deklarace částečné metody musí být static nebo nesmí být static.
  • CS0764: Obě deklarace částečné metody musí být unsafe nebo nesmí být unsafe
  • CS1067: Částečné deklarace musí mít stejné názvy parametrů typu a modifikátory rozptylu ve stejném pořadí.
  • CS8142: Obě částečné deklarace členů musí používat stejné názvy elementů řazené kolekce členů.
  • CS8663: Obě deklarace částečného členu musí být jen pro čtení, nebo nesmí být jen pro čtení.
  • CS8796: Částečná metoda musí mít modifikátory přístupnosti, protože má nevoid návratový typ.
  • CS8795: Částečný člen musí mít část implementace, protože má modifikátory přístupnosti.
  • CS8797: Částečná metoda musí mít modifikátory přístupnosti, protože má parametry 'out'.
  • CS8798: Částečná metoda musí mít modifikátory přístupnosti, protože má modifikátor 'virtual', 'override', 'sealed'new nebo 'extern' modifikátor.
  • CS8799: Obě částečné deklarace členů musí mít stejné modifikátory přístupnosti.
  • CS8800: Obě částečné deklarace členů musí mít identické kombinace virtual, override, sealeda new modifikátory.
  • CS8817: Obě deklarace částečné metody musí mít stejný návratový typ.
  • CS8818: Částečné deklarace členů musí mít odpovídající ref návratové hodnoty.
  • CS8863: Seznam parametrů může obsahovat pouze jednu deklaraci částečného typu.
  • CS8988: scoped Modifikátor parametru neodpovídá částečné definici.
  • CS9248: Částečná vlastnost musí mít část implementace.
  • CS9249: Částečná vlastnost musí mít část definice.
  • CS9250: Částečná vlastnost nemusí mít více definujících deklarací a nemůže být automatickou vlastností.
  • CS9251: Částečná vlastnost nemusí mít více implementací deklarací
  • CS9252: Je nutné implementovat přístupové objekty vlastností, protože je deklarován v části definice.
  • CS9253: Přístupové objekty vlastností neimplementují žádné přístupové objekty deklarované v části definice
  • CS9254: Přístupové objekty vlastností musí odpovídat části definice
  • CS9255: Obě částečné deklarace vlastností musí mít stejný typ.
  • CS9256: Částečné deklarace vlastností mají rozdíly mezi podpisy.
  • CS9257: Musí být požadovány obě částečné deklarace vlastností nebo nemusí být požadovány.
  • CS9258: V této jazykové verzi je klíčové slovo 'field' vázáno na syntetizované backing pole pro vlastnost. Abyste se vyhnuli generování syntetizovaného backingového pole a odkazování na existujícího člena, použijte místo toho "this.field" nebo "@field".
  • CS9263: Částečná vlastnost nemůže mít inicializátor definice i implementace.

Pro vlastnosti zálohované pole je možné vygenerovat následující upozornění:

  • CS9264: Při ukončování konstruktoru musí vlastnost bez hodnoty null obsahovat hodnotu, která není null. Zvažte přidání modifikátoru "required" nebo deklarování vlastnosti jako nullable nebo přidání[field: MaybeNull, AllowNull] '' atributů.*
  • CS9266: Jeden přístup k vlastnosti by měl používat "field", protože ho používá druhý přístup.

Následující části popisují příčinu a opravy těchto chyb a upozornění.

Částečné typy

  • CS0260: Chybí částečný modifikátor deklarace typu; existuje další částečná deklarace tohoto typu.
  • CS0261: Částečné deklarace typu musí být všechny třídy, všechny struktury nebo všechna rozhraní
  • CS0262: Částečné deklarace typu mají konfliktní modifikátory přístupnosti
  • CS0263: Částečné deklarace typu nesmí určovat různé základní třídy
  • CS0264: Částečné deklarace typu musí mít stejné názvy parametrů typu ve stejném pořadí.
  • CS0265: Částečné deklarace typu mají nekonzistentní omezení pro parametr type 'type parameter'
  • CS0267: Modifikátor 'partial' se může objevit pouze bezprostředně před 'class', 'record', 'struct', 'interface' nebo metodou nebo návratovým typem vlastnosti.
  • CS8863: Seznam parametrů může obsahovat pouze jednu deklaraci částečného typu.

Deklarace částečného typu může způsobit, že kompilátor vygeneruje následující upozornění:

  • CS0282: Není definováno řazení mezi poli v několika deklarací částečné class nebo struct "typu". Chcete-li zadat řazení, musí být všechna pole instance ve stejné deklaraci.

U každého částečného partial typu musí klíčové slovo bezprostředně předcházet class, record, , structnebo interface. Kompilátor vygeneruje chybu, pokud se zobrazí v jiném pořadí. Kromě toho:

  • Všechny deklarace částečného typu se musí shodovat s ohledem na typ (class, struct, record class, record struct, readonly struct, nebo readonly record struct).
  • Všechny deklarace musí obsahovat partial modifikátor.
  • Deklarace obecného částečného typu musí obsahovat stejné parametry typu ve stejném pořadí.

Některé části deklarace nejsou nutné opakovat u všech deklarací typu. Pokud se však tyto prvky opakují u více partial deklarací, musí se shodovat:

  • Všechny modifikátory přístupu, například public.
  • Jakákoli základní třída nebo implementovaná rozhraní.
  • Všechna omezení parametrů typu.

Primární konstruktor lze deklarovat na maximálně jedné deklaraci částečného typu.

Kompilátor vás upozorní, pokud máte více polí deklarovaných v několika souborech pro určitý partial struct typ. Pokud je pořadí rozložení důležité, musíte deklarovat všechna pole ve stejném souboru. Pokud na objednávce nezáleží, můžete ji použít System.Runtime.InteropServices.StructLayoutAttribute s LayoutKind.Auto hodnotou.

Částečné členy

  • CS0750: Částečný člen nemůže mít modifikátor 'abstract'.
  • CS0751: Částečný člen musí být deklarován v částečném class nebo částečném struct
  • CS0754: Částečný člen nemusí explicitně implementovat metodu rozhraní.
  • CS0763: Obě deklarace částečné metody musí být static nebo nesmí být static.
  • CS0764: Obě deklarace částečné metody musí být unsafe nebo nesmí být unsafe
  • CS8142: Obě částečné deklarace členů musí používat stejné názvy elementů řazené kolekce členů.
  • CS8663: Obě deklarace částečného členu musí být jen pro čtení, nebo nesmí být jen pro čtení.
  • CS8799: Obě částečné deklarace členů musí mít stejné modifikátory přístupnosti.
  • CS8800: Obě částečné deklarace členů musí mít identické kombinace virtual, override, sealeda new modifikátory.
  • CS8818: Částečné deklarace členů musí mít odpovídající ref návratové hodnoty.
  • CS8988: scoped Modifikátor parametru neodpovídá částečné definici.

Částečné členy mají dvě deklarace. Deklarace bez implementace je deklarující deklarace. Deklarace s implementací je prováděcí deklarace. Částečné členy jsou povoleny pouze v partial typu. Částečné členy nemohou být abstract. Částečné členy nemohou explicitně implementovat rozhraní. Obě deklarace částečného členu musí mít identické podpisy. Například obě nebo ani jedna deklarace mohou obsahovat static nebo unsafe modifikátory.

Částečné metody

  • CS0501: Členová funkce musí deklarovat tělo, protože není označeno abstract, externnebo partial
  • CS0755: Obě částečné deklarace metody musí být rozšiřující metody, nebo ani jedna z nich nemůže být rozšiřující metoda.
  • CS0756: Částečná metoda nemusí mít více definic deklarací.
  • CS0757: Částečná metoda nemusí mít více implementací deklarací.
  • CS0759: Nebyla nalezena žádná definice deklarace pro implementaci deklarace částečné metody.
  • CS0761: Částečné deklarace method<T> metody mají nekonzistentní omezení parametrů typu.
  • CS0762: Nelze vytvořit delegáta z metody, protože se jedná o částečnou metodu bez implementace deklarace
  • CS1067: Částečné deklarace musí mít stejné názvy parametrů typu a modifikátory rozptylu ve stejném pořadí.
  • CS8796: Částečná metoda musí mít modifikátory přístupnosti, protože má nevoid návratový typ.
  • CS8795: Částečný člen musí mít část implementace, protože má modifikátory přístupnosti.
  • CS8797: Částečná metoda musí mít modifikátory přístupnosti, protože má parametry 'out'.
  • CS8798: Částečná metoda musí mít modifikátory přístupnosti, protože má modifikátor 'virtual', 'override', 'sealed'new nebo 'extern' modifikátor.
  • CS8817: Obě deklarace částečné metody musí mít stejný návratový typ.

Některé partial deklarace metody nevyžadují implementaci deklarace. To znamená, že pokud člen vrátí void, deklaruje žádné modifikátory přístupu (včetně výchozího private modifikátoru) a nezahrnuje žádný z virtual, , overridenebo sealednew modifikátorů. V opačném případě musí jakákoli částečná metoda obsahovat deklarování i implementaci deklarací i implementující deklarace.

Pokud částečná metoda obsahuje implementickou deklaraci, musí být obě deklarace identické. Definovat lze přesně jednu implementaci deklarace.

Částečné vlastnosti

Následující chyby označují chyby v deklaraci částečné vlastnosti nebo indexeru:

  • CS9248: Částečná vlastnost musí mít část implementace.
  • CS9249: Částečná vlastnost musí mít část definice.
  • CS9250: Částečná vlastnost nemusí mít více definujících deklarací a nemůže být automatickou vlastností.
  • CS9251: Částečná vlastnost nemusí mít více implementací deklarací
  • CS9252: Je nutné implementovat přístupové objekty vlastností, protože je deklarován v části definice.
  • CS9253: Přístupové objekty vlastností neimplementují žádné přístupové objekty deklarované v části definice
  • CS9254: Přístupové objekty vlastností musí odpovídat části definice
  • CS9255: Obě částečné deklarace vlastností musí mít stejný typ.
  • CS9257: Musí být požadovány obě částečné deklarace vlastností nebo nemusí být požadovány.

Následující upozornění označuje rozdíl podpisu v deklarování a implementaci deklarací a implementací deklarací v částečné vlastnosti:

  • CS9256: Částečné deklarace vlastností mají rozdíly mezi podpisy.

Částečná vlastnost nebo indexer musí mít deklarující deklaraci i implementující deklaraci. Podpisy obou deklarací se musí shodovat. Vzhledem k tomu, že deklarace deklarace používá stejnou syntaxi jako automaticky implementovaná vlastnost, nemůže být implementující deklarace automaticky implementovaná vlastnost. Příslušenství musí mít alespoň jedno tělo příslušenství. Počínaje jazykem C# 13 můžete pomocí klíčového field slova deklarovat jeden přístup pomocí stručné syntaxe:

public partial int ImplementingDeclaration { get => field; set; }

vlastnosti zálohované polem

  • CS9258: V této jazykové verzi je klíčové slovo 'field' vázáno na syntetizované backing pole pro vlastnost. Abyste se vyhnuli generování syntetizovaného backingového pole a odkazování na existujícího člena, použijte místo toho "this.field" nebo "@field".
  • CS9263: Částečná vlastnost nemůže mít inicializátor definice i implementace.
  • CS9264: Při ukončování konstruktoru musí vlastnost bez hodnoty null obsahovat hodnotu, která není null. Zvažte přidání modifikátoru "required" nebo deklarování vlastnosti jako nullable nebo přidání[field: MaybeNull, AllowNull] '' atributů.*
  • CS9266: Jeden přístup k vlastnosti by měl používat "field", protože ho používá druhý přístup.

Důležité

Klíčové field slovo je funkce preview v jazyce C# 13. Pokud chcete použít field kontextové klíčové slovo, musíte použít .NET 9 a nastavit prvek <LangVersion> do preview souboru projektu.

Měli byste být opatrní pomocí funkce klíčového field slova ve třídě, která má pole s názvem field. Nové field klíčové slovo stínuje pole pojmenované field v oboru přístupového objektu vlastnosti. Můžete změnit název field proměnné nebo pomocí @ tokenu odkazovat na field identifikátor jako @field. Další informace najdete ve specifikaci funkce pro field klíčové slovo.

Počínaje jazykem C# 13 vám funkce field Preview umožňuje přístup k syntetizovanému poli kompilátoru pro vlastnost. CS9258 označuje, že máte proměnnou s názvem field, která může být skryta kontextovým klíčovým slovem field.

CS9263 označuje, že deklarace deklarování zahrnuje implementaci. Tato implementace může přistupovat k syntetizovanému záložnímu poli kompilátoru pro danou vlastnost. CS9264 indikuje, že vaše použití field předpokládá pole, které není nullable backing, zatímco deklarace vlastnosti je nullable. Kompilátor předpokládá, že backing pole i vlastnost mají stejnou hodnotu nullability. Musíte přidat [field:MaybeNull, AllowNull] atribut do deklarace vlastnosti, aby bylo možné označit, že field hodnota by měla být považována za nullable. CS9266 označuje, že jeden z přístupových objektů vlastností používá field klíčové slovo, ale druhý používá ručně deklarované záložní pole. Upozornění značí, že jste to možná udělali omylem.