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.
Fehler und Warnungen im Zusammenhang mit
- CS8343:
ref structskönnen keine Schnittstellen implementieren. - CS8344: Die
foreach-Anweisung kann nicht für Enumerationszeichen in asynchronen oder Iteratormethoden verwendet werden, da der Typ einref structoder ein Typparameter ist, derref structzulässt. - CS8345: Feld- oder automatisch implementierte Eigenschaft darf nicht vom Typ sein, es sei denn, es handelt sich um ein Instanzmember einer
ref struct. - CS9048: Der
scoped-Modifizierer kann nur für refs undref struct-Werte verwendet werden. - CS9050: Ein
ref-Feld kann nicht aufref structverweisen. - CS9059: Ein „ref“-Feld kann nur in „ref struct“ deklariert werden.
- CS9241: „ref struct“ ist bereits angegeben.
- CS9242: Die Einschränkungsklausel „allows“ muss die letzte angegebene Einschränkung sein.
- CS9243: Kann keine „ref struct“ für einen Typparameter zulassen, der bei anderen Einschränkungen als Klasse bekannt ist
- CS9244: Der Typ darf kein
ref structoder ein Typparameter sein, der „ref struct“ zulässt, um dies als Parameter im generischen Typ oder der generischen Methode zu verwenden. - CS9245: Der Typ kann keine Schnittstellenmember für den
ref struct-Typ implementieren. - CS9246: Auf einen nicht-virtueller Schnittstellenmember kann nicht mit einem Typparameter zugegriffen werden, der „ref struct“ erlaubt.
- CS9247: Die foreach-Anweisung kann nicht auf Enumeratoren des Typs ausgeführt werden, da es sich um einen Typparameter handelt, der „ref struct“ zulässt und zur Kompilierzeit nicht zum Implementieren von
IDisposablebekannt ist. - CS9267: Elementtyp eines Iterators kann keine Refstruktur oder ein Typparameter sein, der Refstrukturen zulässt.
„ref“-Sicherheitsverstöße
- CS8345: Feld- oder automatisch implementierte Eigenschaft darf nicht vom Typ sein, es sei denn, es handelt sich um ein Instanzmember einer
ref struct. - CS9048: Der
scoped-Modifizierer kann nur für refs undref struct-Werte verwendet werden. - CS9050: Ein
ref-Feld kann nicht aufref structverweisen. - CS9059: Ein
ref-Feld kann nur inref structdeklariert werden.
Ein ref struct-Typ kann ref-Felder enthalten. Andere Typen sind keine zulässigen ref-Felder. Der Compiler erzwingt Einschränkungen für die Deklarationen und die Verwendung von ref struct-Typen, um „ref“-Sicherheitsregeln für Instanzen eines beliebigen ref struct-Typs durchzusetzen:
- Nur
ref structTypen können automatisch implementierterefEigenschaften enthalten. - Nur
ref struct-Typen oderref-Variablen können denscoped-Modifizierer aufweisen. - Ein
ref-Feld kann nur in einemref struct-Typ deklariert werden. - Ein
ref-Feld kann nicht auf einenref struct-Typ verweisen.
Ein Verstoß gegen eine dieser Regeln führt zu einem der aufgeführten Fehler. Wenn Sie dieses Sprachfeature verwenden möchten, konvertieren Sie den Typ in ref struct. Entfernen Sie andernfalls das unzulässige Konstrukt.
„ref struct“-Schnittstellenimplementierungen
- CS8343:
ref structskönnen keine Schnittstellen implementieren. - CS8344: Die
foreach-Anweisung kann nicht für Enumerationszeichen in asynchronen oder Iteratormethoden verwendet werden, da der Typ einref structoder ein Typparameter ist, derref structzulässt. - CS9241: „ref struct“ ist bereits angegeben.
- CS9242: Die Einschränkungsklausel „allows“ muss die letzte angegebene Einschränkung sein.
- CS9243: Kann keine „ref struct“ für einen Typparameter zulassen, der bei anderen Einschränkungen als Klasse bekannt ist
- CS9244: Der Typ darf kein
ref structoder ein Typparameter sein, der „ref struct“ zulässt, um dies als Parameter im generischen Typ oder der generischen Methode zu verwenden. - CS9245: Der Typ kann keine Schnittstellenmember für den
ref struct-Typ implementieren. - CS9246: Auf einen nicht-virtueller Schnittstellenmember kann nicht mit einem Typparameter zugegriffen werden, der „ref struct“ erlaubt.
- CS9247: Die foreach-Anweisung kann nicht auf Enumeratoren des Typs ausgeführt werden, da es sich um einen Typparameter handelt, der „ref struct“ zulässt und zur Kompilierzeit nicht zum Implementieren von
IDisposablebekannt ist. - CS9267: Elementtyp eines Iterators kann keine Refstruktur oder ein Typparameter sein, der Refstrukturen zulässt.
Vor C# 13 können ref struct-Typen keine Schnittstellen implementieren. Der Compiler generiert CS8343. Ab C# 13 können ref struct-Typen basierend auf den folgenden Regeln Schnittstellen implementieren:
- Eine
ref structkann nicht in eine Instanz einer von ihr implementierten Schnittstelle konvertiert werden. Diese Einschränkung umfasst die implizite Konvertierung, wenn Sie einenref struct-Typ als Argument verwenden, wenn der Parameter ein Schnittstellentyp ist. Die Konvertierung führt zu einer Boxing-Konvertierung, die gegen die Verweissicherheit verstößt. - Eine
ref struct, die eine Schnittstelle implementiert, muss alle Schnittstellenmitglieder implementieren. Dieref structmuss Mitglieder implementieren, in denen die Schnittstelle eine Standardimplementierung enthält.
Ab C# 13 kann ref struct als Typargument für einen generischen Typparameter verwendet werden, allerdings nur, wenn dieser über die allows ref struct-Antieinschränkung verfügt. Wenn Sie die allows ref struct-Antieinschränkung verwenden, müssen Sie die folgenden Regeln befolgen:
ref structwird als Typargument verwendet, und der Typparameter muss über dieallows ref struct-Antieinschränkung verfügen. Dieallows ref struct-Antieinschränkung muss der letzte Teil derwhere-Klausel sein.- Beim Verwenden des Typparameters müssen die „ref“-Sicherheitsregeln beachtet werden.
- Ein
ref structoder ein Typargument, das einref structTyp sein kann, kann nicht als Elementtyp für eine Iteratormethode verwendet werden.