Olvasás angol nyelven

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


Típus- és tagdeklarációkkal kapcsolatos partial hibák és partial figyelmeztetések

A típus- és partial tagdeklarációkkal kapcsolatban partial számos hiba lépett fel:

  • CS0260: Hiányzik a részleges módosító a típusdeklaráción; létezik egy másik ilyen típusú részleges deklaráció
  • CS0261: A részleges típusdeklarációknak minden osztálynak, minden szerkezetnek vagy minden interfésznek kell lenniük
  • CS0262: A részleges típusú deklarációk ütköző akadálymentességi módosítókkal rendelkeznek
  • CS0263: A részleges típusdeklarációk nem adhatnak meg különböző alaposztályokat
  • CS0264: A részleges típusdeklarációknak azonos típusú paraméternevekkel kell rendelkezniük ugyanabban a sorrendben
  • CS0265: A részleges típusdeklarációk inkonzisztens kényszerekkel rendelkeznek a típusparaméterre vonatkozóan
  • CS0267: A "partial" módosító csak közvetlenül a "", "class", "record",struct ""interface vagy metódus vagy tulajdonság visszatérési típusa előtt jelenhet meg.
  • CS0282: Nincs definiált sorrend a mezők között több részleges osztály vagy szerkezet "típus" deklarációjában. A rendezés megadásához minden példánymezőnek ugyanabban a deklarációban kell lennie.
  • CS0501: A "tagfüggvénynek" deklarálnia kell egy törzset, mert nincs megjelölve abstract, externvagy partial
  • CS0750: Egy részleges tag nem rendelkezhet "abstract" módosítóval.
  • CS0751: Részleges tagot részlegesen class vagy részlegesen kell deklarálni struct
  • CS0754: A részleges tag nem valósíthat meg explicit módon interfészmetódust.
  • CS0755: Mindkét részmetódus-deklarációnak bővítménymetódusnak kell lennie, vagy egyik sem lehet bővítménymetódus.
  • CS0756: Előfordulhat, hogy egy részleges metódus nem rendelkezik több definiáló deklarációval.
  • CS0757: Előfordulhat, hogy egy részleges módszer nem rendelkezik több végrehajtási deklarációval.
  • CS0759: Nem található meghatározó deklaráció a részleges módszerre vonatkozó deklaráció végrehajtásához.
  • CS0761: A részleges metódus deklarációi method<T> inkonzisztens típusú paraméterkorlátokkal rendelkeznek.
  • CS0762: Nem hozható létre delegálás a metódusból, mert végrehajtási deklaráció nélkül részleges metódus
  • CS0763: Mindkét részleges módszer deklarációjának kell lennie static , vagy egyik sem lehet static.
  • CS0764: Mindkét részmetódus-deklarációnak meg kell lennie unsafe , vagy egyik sem lehet unsafe
  • CS1067: A részleges deklarációknak azonos típusú paraméternevekkel és varianciájú módosítókkal kell rendelkezniük ugyanabban a sorrendben.
  • CS8142: Mindkét részleges tagdeklarációnak ugyanazokat a rekordelemneveket kell használnia.
  • CS8663: Mindkét részleges tagdeklarációnak olvashatónak kell lennie, vagy egyik sem olvasható
  • CS8796: A részleges metódusnak akadálymentességi módosítókkal kell rendelkeznie, mert érvénytelen visszatérési típussal rendelkezik.
  • CS8795: A részleges tagnak implementálási résztel kell rendelkeznie, mert akadálymentességi módosítókkal rendelkezik.
  • CS8797: A részleges metódusnak akadálymentességi módosítókkal kell rendelkeznie, mert "out" paraméterekkel rendelkezik.
  • CS8798: A részleges metódusnak akadálymentességi módosítókkal kell rendelkeznie, mert rendelkezik ""virtual, "", "override"sealed, ""new vagy "extern" módosítóval.
  • CS8799: Mindkét részleges tag deklarációnak azonos akadálymentességi módosítókkal kell rendelkeznie.
  • CS8800: Mindkét részleges tagdeklarációnak azonos , , sealedés new módosító kombinációkkal virtualoverridekell rendelkeznie.
  • CS8817: Mindkét részleges metódusdeklarációnak azonos visszatérési típussal kell rendelkeznie.
  • CS8818: A részleges tagdeklarációknak egyező visszatérési ref értékekkel kell rendelkezniük.
  • CS8863: Csak egyetlen részleges típusdeklaráció rendelkezhet paraméterlistával
  • CS8988: A scoped paraméter módosítója nem egyezik a részleges definícióval.
  • CS9248: A részleges tulajdonságnak rendelkeznie kell megvalósítási részvel.
  • CS9249: A részleges tulajdonságnak definíciórészrel kell rendelkeznie.
  • CS9250: Előfordulhat, hogy egy részleges tulajdonság nem rendelkezik több definiáló deklarációval, és nem lehet automatikus tulajdonság.
  • CS9251: Előfordulhat, hogy egy részleges tulajdonság nem rendelkezik több végrehajtási deklarációval
  • CS9252: A tulajdonságkiegészítőt implementálni kell, mert deklarálva van a definíciós részben
  • CS9253: A tulajdonság tartozéka nem valósít meg a definíciós részben deklarált kiegészítőt
  • CS9254: A tulajdonság tartozékának meg kell egyeznie a definíciós részével
  • CS9255: Mindkét részleges tulajdonságdeklarációnak azonos típusúnak kell lennie.
  • CS9256: A részleges tulajdonságdeklarációk aláírási eltérésekkel rendelkeznek.
  • CS9257: Mindkét részleges tulajdonságdeklarációnak kötelezőnek kell lennie, vagy egyik sem kötelező
  • CS9258: Ebben a nyelvi verzióban a "field" kulcsszó egy szintetizált háttérmezőhöz kapcsolódik a tulajdonsághoz. Ha nem szeretne szintetizált háttérmezőt létrehozni, és a meglévő tagra hivatkozni, használja helyette a "" vagy athis.field "@field" kifejezést.
  • CS9263: Egy részleges tulajdonság nem rendelkezhet inicializálóval mind a definíció, mind a megvalósítás során.

A mező által támogatott tulajdonságokhoz a következő figyelmeztetések hozhatók létre:

  • CS9264: A nem null értékű tulajdonságnak nem null értékűnek kell lennie a konstruktorból való kilépéskor. Fontolja meg a "szükséges" módosító hozzáadását, vagy a tulajdonság null értékűként való deklarálását vagy "[field: MaybeNull, AllowNull]" attribútumok hozzáadását.*
  • CS9266: Az egyik tartozéknak ""field kell használnia, mert a másik tartozék használja.

A következő szakaszok ismertetik ezeknek a hibáknak és figyelmeztetéseknek az okát és javítását.

Részleges típusok

  • CS0260: Hiányzik a részleges módosító a típusdeklaráción; létezik egy másik ilyen típusú részleges deklaráció
  • CS0261: A részleges típusdeklarációknak minden osztálynak, minden szerkezetnek vagy minden interfésznek kell lenniük
  • CS0262: A részleges típusú deklarációk ütköző akadálymentességi módosítókkal rendelkeznek
  • CS0263: A részleges típusdeklarációk nem adhatnak meg különböző alaposztályokat
  • CS0264: A részleges típusdeklarációknak azonos típusú paraméternevekkel kell rendelkezniük ugyanabban a sorrendben
  • CS0265: A részleges típusdeklarációk inkonzisztens kényszerekkel rendelkeznek a típusparaméterre vonatkozóan
  • CS0267: A "partial" módosító csak közvetlenül a "", "class", "record",struct ""interface vagy metódus vagy tulajdonság visszatérési típusa előtt jelenhet meg.
  • CS8863: Csak egyetlen részleges típusdeklaráció rendelkezhet paraméterlistával

A részleges típusdeklaráció miatt a fordító a következő figyelmeztetést bocsáthatja ki:

  • CS0282: Nincs definiált sorrend a mezők között több részleges class vagy struct "típus" deklarációban. A rendezés megadásához minden példánymezőnek ugyanabban a deklarációban kell lennie.

Bármely részleges típus esetén a partial kulcsszónak azonnal meg kell előznie classa következőt: , recordvagy structinterface. A fordító hibaüzenetet ad ki, ha bármilyen más sorrendben jelenik meg. Ráadásul:

  • Egy részleges típusú deklarációnak meg kell egyeznie a típus (class, , struct, record class, record struct, readonly structvagy readonly record struct) szempontjából.
  • Minden deklarációnak tartalmaznia kell a partial módosítót.
  • Az általános részleges típus deklarációinak azonos sorrendben kell tartalmazniuk ugyanazokat a típusparamétereket.

A deklaráció egyes részeit nem kell megismételni egy típus összes deklarációján. Ha azonban ezek az elemek több deklarációban is partial ismétlődnek, a következőknek kell megfelelniük:

  • Bármilyen hozzáférési módosító, például public.
  • Bármely alaposztály vagy implementált interfész.
  • A típusparaméterekre vonatkozó korlátozások.

Az elsődleges konstruktorok legfeljebb egy deklaráción deklarálhatók részleges típus esetén.

A fordító figyelmezteti, ha több mező van deklarálva több fájlban egy partial struct típushoz. Ha az elrendezési sorrend fontos, deklarálnia kell az összes mezőt ugyanabban a fájlban. Ha a sorrend nem számít, használhatja az System.Runtime.InteropServices.StructLayoutAttribute LayoutKind.Auto értéket.

Részleges tagok

  • CS0750: Egy részleges tag nem rendelkezhet "abstract" módosítóval.
  • CS0751: Részleges tagot részlegesen class vagy részlegesen kell deklarálni struct
  • CS0754: A részleges tag nem valósíthat meg explicit módon interfészmetódust.
  • CS0763: Mindkét részleges módszer deklarációjának kell lennie static , vagy egyik sem lehet static.
  • CS0764: Mindkét részmetódus-deklarációnak meg kell lennie unsafe , vagy egyik sem lehet unsafe
  • CS8142: Mindkét részleges tagdeklarációnak ugyanazokat a rekordelemneveket kell használnia.
  • CS8663: Mindkét részleges tagdeklarációnak olvashatónak kell lennie, vagy egyik sem olvasható
  • CS8799: Mindkét részleges tag deklarációnak azonos akadálymentességi módosítókkal kell rendelkeznie.
  • CS8800: Mindkét részleges tagdeklarációnak azonos , , sealedés new módosító kombinációkkal virtualoverridekell rendelkeznie.
  • CS8818: A részleges tagdeklarációknak egyező visszatérési ref értékekkel kell rendelkezniük.
  • CS8988: A scoped paraméter módosítója nem egyezik a részleges definícióval.

A részleges tagoknak két nyilatkozatuk van. A végrehajtás nélküli deklaráció a deklaráló nyilatkozat. A végrehajtási nyilatkozat a végrehajtási nyilatkozat. A részleges tagok csak típusban partial engedélyezettek. A részleges tagok nem lehetnek abstract. A részleges tagok nem implementálhatnak explicit módon felületet. A részleges tag mindkét nyilatkozatának azonos aláírással kell rendelkeznie. Például a két vagy egyik deklaráció sem tartalmazhatja a módosítókat vagy unsafe a static módosítókat.

Részleges metódusok

  • CS0501: A "tagfüggvénynek" deklarálnia kell egy törzset, mert nincs megjelölve abstract, externvagy partial
  • CS0755: Mindkét részmetódus-deklarációnak bővítménymetódusnak kell lennie, vagy egyik sem lehet bővítménymetódus.
  • CS0756: Előfordulhat, hogy egy részleges metódus nem rendelkezik több definiáló deklarációval.
  • CS0757: Előfordulhat, hogy egy részleges módszer nem rendelkezik több végrehajtási deklarációval.
  • CS0759: Nem található meghatározó deklaráció a részleges módszerre vonatkozó deklaráció végrehajtásához.
  • CS0761: A részleges metódus deklarációi method<T> inkonzisztens típusú paraméterkorlátokkal rendelkeznek.
  • CS0762: Nem hozható létre delegálás a metódusból, mert végrehajtási deklaráció nélkül részleges metódus
  • CS1067: A részleges deklarációknak azonos típusú paraméternevekkel és varianciájú módosítókkal kell rendelkezniük ugyanabban a sorrendben.
  • CS8796: A részleges metódusnak akadálymentességi módosítókkal kell rendelkeznie, mert érvénytelen visszatérési típussal rendelkezik.
  • CS8795: A részleges tagnak implementálási résztel kell rendelkeznie, mert akadálymentességi módosítókkal rendelkezik.
  • CS8797: A részleges metódusnak akadálymentességi módosítókkal kell rendelkeznie, mert "out" paraméterekkel rendelkezik.
  • CS8798: A részleges metódusnak akadálymentességi módosítókkal kell rendelkeznie, mert rendelkezik ""virtual, "", "override"sealed, ""new vagy "extern" módosítóval.
  • CS8817: Mindkét részleges metódusdeklarációnak azonos visszatérési típussal kell rendelkeznie.

Bizonyos partial metódusdeklarációkhoz nincs szükség implementálási deklarációra. Vagyis ha a tag visszatér void, nem deklarál hozzáférési módosítókat (beleértve az alapértelmezett private módosítót), és nem tartalmazza a virtual, override, sealedvagy new módosítók egyikét sem. Ellenkező esetben a részleges módszernek tartalmaznia kell a deklarálási és végrehajtási nyilatkozatokat is.

Ha egy részleges módszer végrehajtási nyilatkozatot tartalmaz, mindkét deklarációnak azonosnak kell lennie. Pontosan egy implementációs deklaráció definiálható.

Részleges tulajdonságok

A következő hibák a részleges tulajdonság- vagy indexelődeklarációk hibáit jelzik:

  • CS9248: A részleges tulajdonságnak rendelkeznie kell megvalósítási részvel.
  • CS9249: A részleges tulajdonságnak definíciórészrel kell rendelkeznie.
  • CS9250: Előfordulhat, hogy egy részleges tulajdonság nem rendelkezik több definiáló deklarációval, és nem lehet automatikus tulajdonság.
  • CS9251: Előfordulhat, hogy egy részleges tulajdonság nem rendelkezik több végrehajtási deklarációval
  • CS9252: A tulajdonságkiegészítőt implementálni kell, mert deklarálva van a definíciós részben
  • CS9253: A tulajdonság tartozéka nem valósít meg a definíciós részben deklarált kiegészítőt
  • CS9254: A tulajdonság tartozékának meg kell egyeznie a definíciós részével
  • CS9255: Mindkét részleges tulajdonságdeklarációnak azonos típusúnak kell lennie.
  • CS9257: Mindkét részleges tulajdonságdeklarációnak kötelezőnek kell lennie, vagy egyik sem kötelező

Az alábbi figyelmeztetés aláírási különbséget jelez egy részleges tulajdonság deklarálásában és implementálásában:

  • CS9256: A részleges tulajdonságdeklarációk aláírási eltérésekkel rendelkeznek.

A részleges tulajdonságnak vagy indexelőnek deklaráló deklarációval és végrehajtási deklarációval kell rendelkeznie. Mindkét deklaráció aláírásának egyeznie kell. Mivel a deklarálási deklaráció ugyanazt a szintaxist használja, mint egy automatikusan implementált tulajdonság, a implementálási deklaráció nem lehet automatikusan implementált tulajdonság. A tartozéknak legalább egy tartozéktörzset kell tartalmaznia. A C# 13-tól kezdődően a field kulcsszóval egy kiegészítőt deklarálhat tömör szintaxissal:

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

mező által támogatott tulajdonságok

  • CS9258: Ebben a nyelvi verzióban a "field" kulcsszó egy szintetizált háttérmezőhöz kapcsolódik a tulajdonsághoz. Ha nem szeretne szintetizált háttérmezőt létrehozni, és a meglévő tagra hivatkozni, használja helyette a "" vagy athis.field "@field" kifejezést.
  • CS9263: Egy részleges tulajdonság nem rendelkezhet inicializálóval mind a definíció, mind a megvalósítás során.
  • CS9264: A nem null értékű tulajdonságnak nem null értékűnek kell lennie a konstruktorból való kilépéskor. Fontolja meg a "szükséges" módosító hozzáadását, vagy a tulajdonság null értékűként való deklarálását vagy "[field: MaybeNull, AllowNull]" attribútumok hozzáadását.*
  • CS9266: Az egyik tartozéknak ""field kell használnia, mert a másik tartozék használja.

Fontos

A field kulcsszó egy előzetes verziójú funkció a C# 13-ban. A környezetfüggő kulcsszó használatához a .NET 9-et kell használnia, és be kell állítania <LangVersion> az elemet preview a field projektfájlban.

Körültekintően használja a field kulcsszó funkciót egy olyan osztályban, amelynek neve fieldegy mező. Az új field kulcsszó árnyékot ad egy tulajdonság-tartozék hatókörében elnevezett field mezőnek. Módosíthatja field a változó nevét, vagy a @ jogkivonat használatával hivatkozhat az field azonosítóra @field. További információkért olvassa el a kulcsszó funkciós specifikációjátfield.

A C# 13-tól kezdődően az előzetes verziójú, field háttérbeli tulajdonságok lehetővé teszik a fordító szintetizált háttérmezőjének elérését egy tulajdonsághoz. A CS9258 azt jelzi, hogy van egy változó neve field, amelyet a környezetfüggő kulcsszó fieldrejthet el.

A CS9263 azt jelzi, hogy a deklarálási nyilatkozat implementációt is tartalmaz. Előfordulhat, hogy az implementáció hozzáfér az adott tulajdonsághoz tartozó fordító szintetizált háttérmezőhöz. A CS9264 azt jelzi, hogy a használata field nem null értékű háttérmezőt feltételez, miközben a tulajdonságdeklaráció null értékű. A fordító feltételezi, hogy a háttérmező és a tulajdonság is ugyanazzal a null értékkel rendelkezik. Az attribútumot hozzá kell adnia a [field:MaybeNull, AllowNull] tulajdonságdeklarációhoz, hogy az field érték null értékűnek minősüljön. A CS9266 azt jelzi, hogy egy tulajdonság egyik tartozéka a field kulcsszót használja, a másik viszont egy kézzel deklarált háttérmezőt. A figyelmeztetés azt jelzi, hogy ezt véletlenül tette.