Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Errori e avvisi associati ai tipi
- CS8343:
ref structsimpossibile implementare interfacce - CS8344:
foreachl'istruzione non può operare sugli enumeratori nei metodi asincroni o iteratori perché il tipo è unref structo un parametro di tipo che consenteref struct. - CS8345: un campo o una proprietà implementata automaticamente non può essere di tipo a meno che non sia un membro di istanza di un valore
ref struct. - CS9048: il modificatore
scopedpuò essere usato solo per ref e i valoriref struct. - CS9050: un campo
refnon può fare riferimento aref struct. - CS9059: un campo ref può essere dichiarato solo in un ref struct.
- CS9241: 'ref struct' è già specificato.
- CS9242: la clausola di vincolo 'allows' deve essere l'ultimo vincolo specificato.
- CS9243: impossibile consentire reft struct per un parametro di tipo noto da altri vincoli come classe.
- CS9244: il tipo potrebbe non essere un
ref structo un parametro di tipo che consente ref struct per usarlo come parametro nel tipo o nel metodo generico. - CS9245: il tipo non può implementare il membro dell'interfaccia per il tipo
ref struct. - CS9246: non è possibile accedere a un membro dell'interfaccia dell'istanza non virtuale su un parametro di tipo che consente ref struct.
- CS9247: l'istruzione foreach non può operare sugli enumeratori di tipo perché è un parametro di tipo che consente ref struct e non è noto per l’implementazione in fase di compilazione
IDisposable. - CS9267: il tipo di elemento di un iteratore potrebbe non essere uno struct di riferimento o un parametro di tipo che consente struct di riferimento
Violazioni di sicurezza delle variabili ref
- CS8345: un campo o una proprietà implementata automaticamente non può essere di tipo a meno che non sia un membro di istanza di un valore
ref struct. - CS9048: il modificatore
scopedpuò essere usato solo per ref e i valoriref struct. - CS9050: un campo
refnon può fare riferimento aref struct. - CS9059: un campo
refpuò essere dichiarato solo in un oggettoref struct.
Un tipo ref struct può includere campi ref. Altri tipi non sono campi ref consentiti. Il compilatore applica restrizioni alle dichiarazioni e all'uso dei tipi ref struct per applicare le regole di sicurezza ref alle istanze di qualsiasi tipo ref struct:
- Solo
ref structi tipi possono contenere proprietà implementaterefautomaticamente. - Solo i tipi
ref structo le variabilirefpossono avere il modificatorescoped. - È possibile dichiarare un campo
refsolo in un tiporef struct. - Un campo
refnon può fare riferimento a un tiporef struct.
La violazione di una di queste regole genera uno degli errori elencati. Se si intende usare tale funzionalità del linguaggio, convertire il tipo in un oggetto ref struct. In caso contrario, rimuovere il costrutto non consentito.
implementazioni dell'interfaccia ref struct
- CS8343:
ref structsimpossibile implementare interfacce - CS8344:
foreachl'istruzione non può operare sugli enumeratori nei metodi asincroni o iteratori perché il tipo è unref structo un parametro di tipo che consenteref struct. - CS9241: 'ref struct' è già specificato.
- CS9242: la clausola di vincolo 'allows' deve essere l'ultimo vincolo specificato.
- CS9243: impossibile consentire reft struct per un parametro di tipo noto da altri vincoli come classe.
- CS9244: il tipo potrebbe non essere un
ref structo un parametro di tipo che consente ref struct per usarlo come parametro nel tipo o nel metodo generico. - CS9245: il tipo non può implementare il membro dell'interfaccia per il tipo
ref struct. - CS9246: non è possibile accedere a un membro dell'interfaccia dell'istanza non virtuale su un parametro di tipo che consente ref struct.
- CS9247: l'istruzione foreach non può operare sugli enumeratori di tipo perché è un parametro di tipo che consente ref struct e non è noto per l’implementazione in fase di compilazione
IDisposable. - CS9267: il tipo di elemento di un iteratore potrebbe non essere uno struct di riferimento o un parametro di tipo che consente struct di riferimento
Prima di C# 13, i tipi ref struct non possono implementare interfacce. Il compilatore genera l'errore CS8343. A partire da C# 13, i tipi ref struct possono implementare interfacce, sottostando alle regole seguenti:
ref structnon può essere convertito in un'istanza di un'interfaccia implementata. Questa restrizione include la conversione implicita quando si usa un tiporef structcome argomento quando il parametro è un tipo di interfaccia. La conversione comporta una conversione boxing, che viola la sicurezza di riferimento.ref structche implementa un'interfaccia deve implementare tutti i membri dell'interfaccia.ref structdeve implementare i membri in cui l'interfaccia include un'implementazione predefinita.
A partire da C# 13, un ref struct può essere usato come argomento di tipo per un parametro di tipo generico, se e solo se il parametro di tipo generico ha il l’anti-vincolo allows ref struct. Quando si usa l'anti-vincolo allows ref struct, è necessario seguire queste regole:
ref structviene utilizzato come argomento di tipo, il parametro di tipo deve avere l'anti-vincoloallows ref struct. L’anti-vincoloallows ref structdeve essere l'ultimo nella clausolawhereper tale parametro- L'uso di istanze del parametro di tipo deve rispettare le regole di sicurezza di riferimento.
- Un
ref structargomento di tipo o che può essere unref structtipo non può essere usato come tipo di elemento per un metodo iteratore.