Condividi tramite


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