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.
| Proprietà | valore |
|---|---|
| ID regola | CA2207 |
| Title | Inizializzare i campi statici dei tipi di valore inline |
| Categoria | Utilizzo |
| La correzione causa un'interruzione o meno | Non causa un'interruzione |
| Abilitato per impostazione predefinita in .NET 10 | No |
Causa
Un tipo valore dichiara un costruttore statico esplicito.
Descrizione regola
Quando un tipo di valore viene dichiarato, viene sottoposto a un'inizializzazione predefinita in cui tutti i campi di tipo valore vengono impostati su zero e tutti i campi di tipo riferimento sono impostati su null (Nothing in Visual Basic). È garantito l'esecuzione di un costruttore statico esplicito solo prima che venga chiamato un costruttore di istanza o un membro statico del tipo. Pertanto, se il tipo viene creato senza chiamare un costruttore di istanza, non è garantito l'esecuzione del costruttore statico.
Se tutti i dati statici vengono inizializzati inline e non viene dichiarato alcun costruttore statico esplicito, i compilatori C# e Visual Basic aggiungono il beforefieldinit flag alla definizione della classe CIL. I compilatori aggiungono anche un costruttore statico privato che contiene il codice di inizializzazione statica. Questo costruttore statico privato viene garantito di essere eseguito prima di accedere a tutti i campi statici 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.
Example
// This struct violates the rule.
struct BadStruct
{
private static readonly int s_first;
private static readonly int s_second;
static BadStruct()
{
s_first = 1;
s_second = 2;
}
// ...
}
// This struct satisfies the rule.
struct GoodStruct
{
private static readonly int s_first = 1;
private static readonly int s_second = 2;
// ...
}
Quando eliminare gli avvisi
Non escludere un avviso da questa regola.
Regole correlate
CA1810: Inizializzare i campi statici del tipo di riferimento inline