Chyby a upozornění přidružená k typům ref struct
- CS8343:
ref structs
Nelze implementovat rozhraní - CS8344:
foreach
Příkaz nemůže pracovat s enumerátory v asynchronních nebo iterátorových metodách, protože typ jeref struct
nebo parametr typu, který umožňujeref struct
. - CS8345: Pole nebo automaticky implementovaná vlastnost nemůže být typu, pokud není členem
ref struct
instance . - CS9048:
scoped
Modifikátor lze použít pouze pro odkazy aref struct
hodnoty. - CS9050: Pole
ref
nemůže odkazovat na .ref struct
- CS9059: Pole ref lze deklarovat pouze ve struktuře odkazu.
- CS9241: "ref struktura" je již zadána.
- CS9242: Klauzule constraint "allows" musí být posledním zadaným omezením.
- CS9243: Nelze povolit ref struktury pro parametr typu známé z jiných omezení být třída.
- CS9244: Typ nemusí být
ref struct
parametr typu, který umožňuje struktury ref použít jako parametr v obecném typu nebo metodě. - CS9245: Typ nemůže implementovat člen rozhraní pro
ref struct
typ. - CS9246: Člen rozhraní jiné instance než virtuální instance nelze získat přístup k parametru typu, který umožňuje strukturu ref.
- CS9247: příkaz foreach nemůže pracovat s enumerátory typu, protože jde o parametr typu, který umožňuje refstrukci a není známo v době kompilace implementovat
IDisposable
. - CS9267: Typ prvku iterátoru nemusí být struktura ref nebo parametr typu umožňující struktury ref
porušení bezpečnosti ref
- CS8345: Pole nebo automaticky implementovaná vlastnost nemůže být typu, pokud není členem
ref struct
instance . - CS9048:
scoped
Modifikátor lze použít pouze pro odkazy aref struct
hodnoty. - CS9050: Pole
ref
nemůže odkazovat na .ref struct
- CS9059: Pole
ref
lze deklarovat pouze vref struct
poli .
Typ ref struct
může obsahovat ref
pole. Jiné typy nejsou povolená ref
pole. Kompilátor vynucuje omezení deklarací a použití ref struct
typů k vynucení pravidel bezpečnosti ref u instancí libovolného ref struct
typu:
- Pouze
ref struct
typy mohou obsahovat automaticky implementovanéref
vlastnosti. - Modifikátor mohou mít
scoped
pouzeref struct
typy neboref
proměnné. - Pole
ref
lze deklarovat pouze vref struct
typu. - Pole
ref
nemůže odkazovat naref struct
typ nebo
Porušení některé z těchto pravidel způsobí jednu z uvedených chyb. Pokud jste chtěli použít tuto jazykovou funkci, převeďte typ na .ref struct
Jinak odeberte nepovolenou konstruktoru.
ref – implementace rozhraní
- CS8343:
ref structs
Nelze implementovat rozhraní - CS8344:
foreach
Příkaz nemůže pracovat s enumerátory v asynchronních nebo iterátorových metodách, protože typ jeref struct
nebo parametr typu, který umožňujeref struct
. - CS9241: "ref struktura" je již zadána.
- CS9242: Klauzule constraint "allows" musí být posledním zadaným omezením.
- CS9243: Nelze povolit ref struktury pro parametr typu známé z jiných omezení být třída.
- CS9244: Typ nemusí být
ref struct
parametr typu, který umožňuje struktury ref použít jako parametr v obecném typu nebo metodě. - CS9245: Typ nemůže implementovat člen rozhraní pro
ref struct
typ. - CS9246: Člen rozhraní jiné instance než virtuální instance nelze získat přístup k parametru typu, který umožňuje strukturu ref.
- CS9247: příkaz foreach nemůže pracovat s enumerátory typu, protože jde o parametr typu, který umožňuje refstrukci a není známo v době kompilace implementovat
IDisposable
. - CS9267: Typ prvku iterátoru nemusí být struktura ref nebo parametr typu umožňující struktury ref
Před C# 13 ref struct
nemůžou typy implementovat rozhraní. Kompilátor vygeneruje CS8343. Počínaje jazykem C# 13 ref struct
můžou typy implementovat rozhraní podle následujících pravidel:
- A
ref struct
nelze převést na instanci rozhraní, které implementuje. Toto omezení zahrnuje implicitní převod při použitíref struct
typu jako argumentu, pokud je parametr typem rozhraní. Výsledkem převodu je krabicový převod, který porušuje bezpečnost ref. - Rozhraní
ref struct
, které implementuje rozhraní , musí implementovat všechny členy rozhraní. Musíref struct
implementovat členy, kde rozhraní obsahuje výchozí implementaci.
Počínaje jazykem C# 13 ref struct
lze použít jako argument typu pro parametr obecného typu, pokud a pouze pokud má allows ref struct
parametr obecného typu anti-constraint. Při použití allows ref struct
anti-constraint musíte postupovat podle těchto pravidel:
- A
ref struct
se používá jako argument typu, parametr typu musí mítallows ref struct
anti-constraint.- Anti-constraintallows ref struct
musí být poslední vwhere
klauzuli pro tento parametr. - Použití instancí, které parametr typu musí dodržovat pravidla bezpečnosti ref.
- Argument
ref struct
typu, který může být typemref struct
, nelze použít jako typ prvku pro metodu iterátoru.