CA2207: Inizializzare i campi statici dei tipi di valore inline
TypeName |
InitializeValueTypeStaticFieldsInline |
CheckId |
CA2207 |
Category |
Microsoft.Usage |
Breaking Change |
Non sostanziale |
Causa
Un tipo di valore dichiara un costruttore statico esplicito.
Descrizione della regola
Quando viene dichiarato, un tipo di valore viene sottoposto a un'inizializzazione predefinita in cui tutti i campi di tipo di valore vengono impostati su zero e tutti i campi di tipo di riferimento vengono impostati su null (Nothing in Visual Basic). L'esecuzione di un costruttore statico esplicito è garantita solo prima che venga chiamato un costruttore di istanza o un membro statico del tipo. Se pertanto il tipo viene creato senza chiamare un costruttore di istanza, il costruttore statico non viene necessariamente eseguito.
Se tutti i dati statici vengono inizializzati inline e non viene dichiarato alcun costruttore statico esplicito, i compilatori C# e Visual Basic aggiungono il flag beforefieldinit alla definizione di classe MSIL. I compilatori aggiungono anche un costruttore statico privato contenente il codice di inizializzazione statico. L'esecuzione di questo costruttore statico privato è garantita prima che venga effettuato l'accesso a qualsiasi campo statico del tipo.
Come correggere le violazioni
Per correggere una violazione di questa regola, inizializzare tutti i dati statici quando vengono dichiarati e rimuovere il costruttore statico.
Esclusione di avvisi
Non escludere un avviso da questa regola.
Regole correlate
CA1810: Inizializzare i campi statici del tipo di riferimento inline