Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Chyby a upozornění přidružená k typům
- CS8343:
ref structsNelze implementovat rozhraní - CS8344:
foreachPříkaz nemůže pracovat s enumerátory v asynchronních nebo iterátorových metodách, protože typ jeref structnebo parametr typu, který umožňujeref struct. - CS8345: Pole nebo automaticky implementovaná vlastnost nemůže být typu, pokud není členem
ref structinstance . - CS9048:
scopedModifikátor lze použít pouze pro odkazy aref structhodnoty. - CS9050: Pole
refnemůž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 structparametr 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 structtyp. - 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 structinstance . - CS9048:
scopedModifikátor lze použít pouze pro odkazy aref structhodnoty. - CS9050: Pole
refnemůže odkazovat na .ref struct - CS9059: Pole
reflze deklarovat pouze vref structpoli .
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 structtypy mohou obsahovat automaticky implementovanérefvlastnosti. - Modifikátor mohou mít
scopedpouzeref structtypy neborefproměnné. - Pole
reflze deklarovat pouze vref structtypu. - Pole
refnemůže odkazovat naref structtyp 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 structsNelze implementovat rozhraní - CS8344:
foreachPříkaz nemůže pracovat s enumerátory v asynchronních nebo iterátorových metodách, protože typ jeref structnebo 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 structparametr 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 structtyp. - 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 structnelze převést na instanci rozhraní, které implementuje. Toto omezení zahrnuje implicitní převod při použitíref structtypu 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 structimplementovat č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 structse používá jako argument typu, parametr typu musí mítallows ref structanti-constraint.- Anti-constraintallows ref structmusí být poslední vwhereklauzuli pro tento parametr. - Použití instancí, které parametr typu musí dodržovat pravidla bezpečnosti ref.
- Argument
ref structtypu, který může být typemref struct, nelze použít jako typ prvku pro metodu iterátoru.