Fouten en waarschuwingen die zijn gekoppeld aan ref struct
typen
- CS8343:
ref structs
kan geen interfaces implementeren - CS8344:
foreach
instructie kan niet worden uitgevoerd op enumerators in asynchrone of iteratormethoden omdat het type eenref struct
of een typeparameter is die het mogelijk maaktref struct
. - CS8345: De eigenschap Veld of automatisch geïmplementeerd kan niet van het type zijn, tenzij het een exemplaarlid van een
ref struct
. - CS9048: De
scoped
wijzigingsfunctie kan alleen worden gebruikt voor refs enref struct
waarden. - CS9050: Een
ref
veld kan niet verwijzen naar eenref struct
. - CS9059: Een verwveld kan alleen worden gedeclareerd in een verw-struct.
- CS9241: 'ref struct' is al opgegeven.
- CS9242: De component 'allows' moet de laatste beperking zijn opgegeven.
- CS9243: Kan verw-structs niet toestaan voor een typeparameter die bekend is van andere beperkingen als klasse.
- CS9244: Het type is
ref struct
mogelijk geen of een typeparameter waarmee verw-structs kunnen worden gebruikt als parameter in het algemene type of de methode. - CS9245: Type kan geen interfacelid voor
ref struct
type implementeren. - CS9246: Een niet-virtueel exemplaarinterfacelid kan niet worden geopend op een typeparameter die refstruct toestaat.
- CS9247: foreach-instructie kan niet worden uitgevoerd op enumerators van het type omdat het een typeparameter is die refstruct toestaat en het niet bekend is tijdens het compileren om te implementeren
IDisposable
. - CS9267: Elementtype van een iterator is mogelijk geen refstruct of een typeparameter die ref-structs toestaat
schendingen van de veiligheid van ref
- CS8345: De eigenschap Veld of automatisch geïmplementeerd kan niet van het type zijn, tenzij het een exemplaarlid van een
ref struct
. - CS9048: De
scoped
wijzigingsfunctie kan alleen worden gebruikt voor refs enref struct
waarden. - CS9050: Een
ref
veld kan niet verwijzen naar eenref struct
. - CS9059: Een
ref
veld kan alleen worden gedeclareerd in eenref struct
.
Een ref struct
type kan velden bevatten ref
. Andere typen zijn geen velden toegestaan ref
. De compiler dwingt beperkingen af voor de declaraties en het gebruik van ref struct
typen om ref-veiligheidsregels af te dwingen voor exemplaren van elk ref struct
type:
- Alleen
ref struct
typen kunnen automatisch geïmplementeerderef
eigenschappen bevatten. - Alleen
ref struct
typen ofref
variabelen kunnen descoped
wijzigingsfunctie hebben. - Een
ref
veld kan alleen in eenref struct
type worden gedeclareerd. - Een
ref
veld kan niet verwijzen naar eenref struct
type/
Het schenden van een van deze regels produceert een van de vermelde fouten. Als u deze taalfunctie wilt gebruiken, converteert u het type naar een ref struct
. Verwijder anders de niet-toegestane constructie.
ref struct interface-implementaties
- CS8343:
ref structs
kan geen interfaces implementeren - CS8344:
foreach
instructie kan niet worden uitgevoerd op enumerators in asynchrone of iteratormethoden omdat het type eenref struct
of een typeparameter is die het mogelijk maaktref struct
. - CS9241: 'ref struct' is al opgegeven.
- CS9242: De component 'allows' moet de laatste beperking zijn opgegeven.
- CS9243: Kan verw-structs niet toestaan voor een typeparameter die bekend is van andere beperkingen als klasse.
- CS9244: Het type is
ref struct
mogelijk geen of een typeparameter waarmee verw-structs kunnen worden gebruikt als parameter in het algemene type of de methode. - CS9245: Type kan geen interfacelid voor
ref struct
type implementeren. - CS9246: Een niet-virtueel exemplaarinterfacelid kan niet worden geopend op een typeparameter die refstruct toestaat.
- CS9247: foreach-instructie kan niet worden uitgevoerd op enumerators van het type omdat het een typeparameter is die refstruct toestaat en het niet bekend is tijdens het compileren om te implementeren
IDisposable
. - CS9267: Elementtype van een iterator is mogelijk geen refstruct of een typeparameter die ref-structs toestaat
Vóór C# 13 ref struct
kunnen typen geen interfaces implementeren. De compiler genereert CS8343. Vanaf C# 13 ref struct
kunnen typen interfaces implementeren, afhankelijk van de volgende regels:
- Een
ref struct
kan niet worden geconverteerd naar een instantie van een interface die wordt geïmplementeerd. Deze beperking omvat de impliciete conversie wanneer u eenref struct
type als argument gebruikt wanneer de parameter een interfacetype is. De conversie resulteert in een boksconversie, die de veiligheid van ref schendt. - Een
ref struct
die een interface implementeert, moet alle interfaceleden implementeren. Deref struct
implementatie moet leden implementeren waarbij de interface een standaard implementatie bevat.
Vanaf C# 13 kan een ref struct
worden gebruikt als een typeargument voor een algemene typeparameter, als en alleen als de algemene typeparameter de allows ref struct
antibeperking heeft. Wanneer u de allows ref struct
antibeperking gebruikt, moet u de volgende regels volgen:
- A
ref struct
wordt gebruikt als een typeargument, de typeparameter moet deallows ref struct
antibeperking hebben.- Deallows ref struct
antibeperking moet het laatste zijn in dewhere
component voor die parameter - Het gebruik van exemplaren van de typeparameter moet voldoen aan de veiligheidsregels voor ref.
- Een
ref struct
of een typeargument dat eenref struct
type kan zijn, kan niet worden gebruikt als het elementtype voor een iterator-methode.