Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
CA2019:
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA2019 |
| Název |
ThreadStatic pole by neměla používat inicializaci přímo ve zdrojovém kódu. |
| Kategorie | Spolehlivost |
| Oprava, která může být destruktivní nebo nedestruktivní | Nezlomitelný |
| Povoleno ve výchozím nastavení v .NET 10 | Jako návrh |
| Příslušné jazyky | C# a Visual Basic |
Příčina
Pole s anotací ThreadStaticAttribute je inicializováno přímo nebo explicitně v konstruktoru static (Shared v jazyce Visual Basic).
Popis pravidla
ThreadStaticAttribute pole by měla být líně inicializována při jejich použití, nikoli vloženou inicializací nebo explicitně v konstruktoru static (Shared v jazyce Visual Basic). A static konstruktor inicializuje pouze to pole ve vlákně, které spouští konstruktor typu static.
Jak opravit porušení
Chcete-li opravit porušení, odeberte inline inicializaci nebo inicializaci konstruktoru static. Místo toho inicializujte pole při prvním použití.
Příklad
Následující fragment kódu ukazuje porušení ca2019:
class C
{
[ThreadStatic]
private static Object obj = new();
}
Class C
<ThreadStatic>
Private Shared obj As New Object()
End Class
Následující fragment kódu ukazuje, jak opravit narušení:
class C
{
[ThreadStatic]
private static Object obj;
static void S1()
{
obj ??= new Object();
}
}
Class C
<ThreadStatic>
Private Shared obj
Shared Sub S1()
If obj Is Nothing Then
obj = New Object()
End If
End Sub
End Class
Kdy potlačit upozornění
Je bezpečné potlačit upozornění z tohoto pravidla, ale vaše aplikace může vykazovat neočekávané chování.