CA2207: Waardetype statische velden inline initialiseren
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA2207 |
Titel | Waardetype statische velden inline initialiseren |
Categorie | Gebruik |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
Een waardetype declareert een expliciete statische constructor.
Beschrijving van regel
Wanneer een waardetype wordt gedeclareerd, ondergaat het een standaard initialisatie waarbij alle waardetypevelden zijn ingesteld op nul en alle verwijzingstypevelden zijn ingesteld null
op (Nothing
in Visual Basic). Een expliciete statische constructor wordt alleen gegarandeerd uitgevoerd voordat een instantieconstructor of statisch lid van het type wordt aangeroepen. Als het type wordt gemaakt zonder een instantieconstructor aan te roepen, wordt de statische constructor daarom niet gegarandeerd uitgevoerd.
Als alle statische gegevens inline worden geïnitialiseerd en er geen expliciete statische constructor wordt gedeclareerd, voegen de C# en Visual Basic-compilers de beforefieldinit
vlag toe aan de CIL-klassedefinitie. De compilers voegen ook een privé statische constructor toe die de statische initialisatiecode bevat. Deze privé statische constructor wordt gegarandeerd uitgevoerd voordat statische velden van het type worden geopend.
Schendingen oplossen
Als u een schending van deze regel wilt oplossen, initialiseert u alle statische gegevens wanneer deze wordt gedeclareerd en verwijdert u de statische constructor.
Wanneer waarschuwingen onderdrukken
Een waarschuwing van deze regel niet onderdrukken.
Gerelateerde regels
CA1810: Referentietype statische velden inline initialiseren