Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Compiler generiert die folgenden Fehler für ungültige Deklarationen statischer abstrakter oder virtueller Member in Schnittstellen:
- CS8920: Die Schnittstelle kann nicht als Typargument verwendet werden. Der statische Member verfügt nicht über eine spezifische Implementierung in der Schnittstelle.
- CS8921: Ein Parameter eines unären Operators muss der enthaltende Typ sein oder sein zugehöriger Typparameter, der darauf beschränkt ist.
- CS8922: Ein Parameter eines
++
- oder--
-Operators muss der enthaltende Typ sein oder sein zugehöriger Typparameter, der darauf beschränkt ist. - CS8923: Der Rückgabetyp für den
++
- oder--
-Operator muss entweder mit dem Parametertyp übereinstimmen, vom Parametertyp abgeleitet werden oder der Typparameter des enthaltenden Typs sein, der beschränkt ist, sofern der Parametertyp kein anderer Typparameter ist. - CS8924: Einer der Parameter eines binären Operators muss der enthaltende Typ sein oder sein zugehöriger Typparameter, der darauf beschränkt ist.
- CS8925: Der erste Operand eines überladenen Shift-Operators muss denselben Typ wie der enthaltende Typ aufweisen, oder seinen Typparameter aufweisen, der darauf beschränkt ist.
- CS8926: Auf einen statischen virtuellen oder abstrakten Schnittstellenmember kann nur über einen Typparameter zugegriffen werden.
- CS8928: Der Typ implementiert kein Member der statischen Schnittstelle. Die Methode kann den Schnittstellenmember nicht implementieren, da er nicht statisch ist.
- CS8930: Die explizite Implementierung eines benutzerdefinierten Operators muss statisch deklariert werden.
- CS8931: Die benutzerdefinierte Konvertierung in einer Schnittstelle muss in einen oder von einem Typparameter für den einschließenden Typ, der auf den einschließenden Typ beschränkt ist, konvertieren.
- CS8932: Die Methode „UnmanagedCallersOnly“ kann den Schnittstellenmember im Typ nicht implementieren.
Diese Fehler treten an drei Stellen in Ihrem Code auf:
- Wenn Sie eine Schnittstelle mit statischen abstrakten oder virtuellen Membern deklarieren
- Wenn Sie einen Typ deklarieren, der eine Schnittstelle mit statischen abstrakten oder virtuellen Membern implementiert, und
- Wenn Sie auf eine statische abstrakte oder virtuelle Methode zugreifen, die in einer Schnittstelle deklariert ist
Fehler in der Schnittstellendeklaration
Die folgenden Fehler können auftreten, wenn Sie eine Schnittstelle mit static abstract
- oder static virtual
-Membern deklarieren:
- CS8921: Ein Parameter eines unären Operators muss der enthaltende Typ sein oder sein zugehöriger Typparameter, der darauf beschränkt ist.
- CS8922: Ein Parameter eines
++
- oder--
-Operators muss der enthaltende Typ sein oder sein zugehöriger Typparameter, der darauf beschränkt ist. - CS8923: Der Rückgabetyp für den
++
- oder--
-Operator muss entweder mit dem Parametertyp übereinstimmen, vom Parametertyp abgeleitet werden oder der Typparameter des enthaltenden Typs sein, der beschränkt ist, sofern der Parametertyp kein anderer Typparameter ist. - CS8924: Einer der Parameter eines binären Operators muss der enthaltende Typ sein oder sein zugehöriger Typparameter, der darauf beschränkt ist.
- CS8925: Der erste Operand eines überladenen Shift-Operators muss denselben Typ wie der enthaltende Typ aufweisen, oder seinen Typparameter aufweisen, der darauf beschränkt ist.
- CS8931: Die benutzerdefinierte Konvertierung in einer Schnittstelle muss in einen oder von einem Typparameter für den einschließenden Typ, der auf den einschließenden Typ beschränkt ist, konvertieren.
Alle diese Regeln sind Erweiterungen der Regeln zum Deklarieren überladener Operatoren. Der Unterschied besteht darin, dass der Parameter entweder der Schnittstellentyp oder der Typparameter der Schnittstelle sein kann, wenn dieser Typparameter darauf beschränkt ist, die Schnittstelle für seinen Typ zu implementieren. Bei binären Operatoren muss nur ein Parameter diese Regel erfüllen.
Zum Beispiel kann INumber<T>
einen T operator++(T)
deklarieren, weil T
gezwungen ist, INumber<T>
zu implementieren.
Um diese Fehler zu beheben, stellen Sie sicher, dass die Parameter aller in der Schnittstelle definierten Operatoren diese Regeln befolgen. Weitere Informationen finden Sie im Sprachreferenzartikel zu statischen abstrakten Membern in Schnittstellen oder im Tutorial zum Erkunden von statischen abstrakten Schnittstellenmembern.
Fehler bei der Deklaration von Typen, die eine Schnittstelle implementieren
Die folgenden Fehler können auftreten, wenn Sie einen Typ definieren, der eine Schnittstelle mit static abstract
- oder static virtual
-Methoden implementiert:
- CS8928: Der Typ implementiert kein Member der statischen Schnittstelle. Die Methode kann den Schnittstellenmember nicht implementieren, da er nicht statisch ist.
- CS8930: Die explizite Implementierung eines benutzerdefinierten Operators muss statisch deklariert werden.
- CS8932: Die Methode „UnmanagedCallersOnly“ kann den Schnittstellenmember im Typ nicht implementieren.
Diese Fehler deuten alle darauf hin, dass Sie die Methode, die einen statischen abstrakten Schnittstellenmember implementiert, falsch deklariert haben. Diese Member müssen als static
deklariert werden. Sie können keine Instanzmember sein. Methoden, die Schnittstellenmember implementieren, können nicht über das System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute-Attribut verfügen, auf das sie angewendet werden.
Fehler beim Aufrufen statischer abstrakter Schnittstellenmember
Die folgenden Fehler können auftreten, wenn Sie versuchen, einen Member aufzurufen, der als static abstract
oder static virtual
Member einer Schnittstelle definiert ist:
- CS8920: Die Schnittstelle kann nicht als Typargument verwendet werden. Der statische Member verfügt nicht über eine spezifische Implementierung in der Schnittstelle.
- CS8926: Auf einen statischen virtuellen oder abstrakten Schnittstellenmember kann nur über einen Typparameter zugegriffen werden.
Aufrufe an Schnittstellenmember, die als static abstract
oder static virtual
deklariert sind, müssen zur Kompilierzeit aufgelöst werden. Sie müssen zu einem statischen Element aufgelöst werden, das in einem Typ definiert ist, der diese Schnittstelle implementiert. Das bedeutet, dass Sie auf diese Member entweder über einen konkreten Typ, der die Schnittstelle implementiert, oder über einen Typparameter zugreifen müssen, der auf die Implementierung der Schnittstelle beschränkt ist. Um diese Fehler zu beheben, ändern Sie den Typ, der für den Zugriff auf das statische Element verwendet wird.