Olvasás angol nyelven

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


Statikus absztrakt és virtuális felület taghibái és figyelmeztetései

A fordító a következő hibákat generálja a statikus absztrakt vagy virtuális tagok érvénytelen deklarációihoz a felületeken:

  • CS8920: Az illesztő nem használható típusargumentumként. A statikus tag nem rendelkezik a legspecifikusabb implementációval a felületen.
  • CS8921: A nem kötelező operátor paraméterének tartalmaznia kell a tartalomtípust, vagy annak típusparaméterét.
  • CS8922: A paramétertípusnak vagy -- operátornak ++ a tartalomtípusnak vagy annak típusparaméterének kell lennie.
  • CS8923: A visszatérési típusnak vagy -- az operátornak ++ meg kell egyeznie a paramétertípussal, vagy a paramétertípusból kell származnia, vagy az adott típus típusparaméterének kell lennie, kivéve, ha a paramétertípus egy másik típusparaméter.
  • CS8924: A bináris operátorok egyik paraméterének tartalmaznia kell a tartalomtípust, vagy annak típusparaméterét.
  • CS8925: A túlterhelt műszak operátorának első operandusának ugyanazzal a típussal kell rendelkeznie, mint az azt tartalmazó típusnak, vagy a típusparaméterének meg kell egyeznie.
  • CS8926: Statikus virtuális vagy absztrakt felületi tag csak típusparaméteren érhető el.
  • CS8928: A típus nem implementálja a statikus illesztő tagot. A metódus nem tudja implementálni az illesztőtagot, mert nem statikus.
  • CS8930: A felhasználó által definiált operátor explicit implementációját statikusnak kell deklarálni
  • CS8931: A felhasználó által definiált átalakításnak a csatolótípusra korlátozott típusparaméterre vagy típusparaméterről kell konvertálnia az illesztőfelületen
  • CS8932: A "UnmanagedCallersOnly" metódus nem implementálható illesztőtag típusban

Ezek a hibák a kód három helyén fordulnak elő:

A felületi deklaráció hibái

A következő hibák fordulhatnak elő, ha felületet deklarál a tagokhoz vagy static virtual a tagokhozstatic abstract:

  • CS8921: A nem kötelező operátor paraméterének tartalmaznia kell a tartalomtípust, vagy annak típusparaméterét.
  • CS8922: A paramétertípusnak vagy -- operátornak ++ a tartalomtípusnak vagy annak típusparaméterének kell lennie.
  • CS8923: A visszatérési típusnak vagy -- az operátornak ++ meg kell egyeznie a paramétertípussal, vagy a paramétertípusból kell származnia, vagy az adott típus típusparaméterének kell lennie, kivéve, ha a paramétertípus egy másik típusparaméter.
  • CS8924: A bináris operátorok egyik paraméterének tartalmaznia kell a tartalomtípust, vagy annak típusparaméterét.
  • CS8925: A túlterhelt műszak operátorának első operandusának ugyanazzal a típussal kell rendelkeznie, mint az azt tartalmazó típusnak, vagy a típusparaméterének meg kell egyeznie.
  • CS8931: A felhasználó által definiált átalakításnak a csatolótípusra korlátozott típusparaméterre vagy típusparaméterről kell konvertálnia az illesztőfelületen

Ezek a szabályok a túlterhelt operátorok deklarálására vonatkozó szabályok kiterjesztései. A különbség az, hogy a paraméter lehet az interfész típusa, vagy az interfész típusparamétere, ha az adott típusparaméter korlátozott az interfész típusának implementálásához. Bináris operátorok esetén csak egy paraméternek kell megfelelnie ennek a szabálynak.

Deklarálhat például egy T operator++(T) olyan hibát, INumber<T> amely T a megvalósításhoz INumber<T>korlátozott.

A hibák kijavításához győződjön meg arról, hogy az interfészben definiált operátorok paraméterei betartják ezeket a szabályokat. A statikus absztrakciós tagokról szóló nyelvi referenciacikkben vagy az oktatóanyagban a statikus absztrakt felület tagjait ismerheti meg.

Hibák a típus implementálási felület deklarációjában

Az alábbi hibák akkor fordulhatnak elő, ha olyan típust határoz meg, amely interfészt static abstract vagy static virtual metódusokat implementál:

  • CS8928: A típus nem implementálja a statikus illesztő tagot. A metódus nem tudja implementálni az illesztőtagot, mert nem statikus.
  • CS8930: A felhasználó által definiált operátor explicit implementációját statikusnak kell deklarálni
  • CS8932: A "UnmanagedCallersOnly" metódus nem implementálható illesztőtag típusban

Ezek a hibák mind azt jelzik, hogy helytelenül deklarálta azt a metódust, amely egy statikus absztrakt illesztőtagot implementál. Ezeket a tagokat deklarálni statickell; nem lehetnek példánytagok. Az illesztőtagokat implementáló metódusok nem alkalmazhatják rájuk az System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute attribútumot.

Statikus absztrakt felülettagok meghívásakor felmerülő hibák

Az alábbi hibák akkor fordulhatnak elő, ha egy felület tagjaként definiált static abstractstatic virtual tagot próbál meghívni:

  • CS8920: Az illesztő nem használható típusargumentumként. A statikus tag nem rendelkezik a legspecifikusabb implementációval a felületen.
  • CS8926: Statikus virtuális vagy absztrakt felületi tag csak típusparaméteren érhető el.

A felülettagokra irányuló hívások fordítási időpontban deklaráltak static abstract vagy static virtual feloldhatók. Az illesztőt megvalósító típusban definiált statikus tagnak kell feloldania őket. Ez azt jelenti, hogy a tagokat egy olyan konkrét típussal kell elérnie, amely megvalósítja az interfészt, vagy egy olyan típusparamétert, amely az interfész implementálásához van korlátozva. A hibák kijavításához módosítsa a statikus tag eléréséhez használt típust.