CA2211: A nem állandó mezők nem lehetnek láthatók
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA2211 |
Cím | A nem állandó mezők nem lehetnek láthatók |
Kategória | Használat |
A javítás kompatibilitástörő vagy nem törik | Törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Javaslatként |
Ok
A nyilvános vagy védett statikus mező nem állandó, és nem is írásvédett.
Szabály leírása
A nem állandó vagy írásvédett statikus mezők nem szálbiztosak. Az ilyen mezőkhöz való hozzáférést gondosan szabályozni kell, és fejlett programozási technikákat igényel az osztályobjektumhoz való hozzáférés szinkronizálásához. Mivel ezeket a képességeket nehéz elsajátítani, és az ilyen objektumok tesztelése saját kihívást jelent, a statikus mezők a legjobban olyan adatok tárolására használhatók, amelyek nem változnak. Ez a szabály a kódtárakra vonatkozik; az alkalmazások nem tehetnek közzé mezőket.
Szabálysértések kijavítása
A szabály megsértésének kijavításához állítsa állandóvá vagy írásvédetté a statikus mezőt. Ha ez nem lehetséges, tervezze át a típust úgy, hogy egy alternatív mechanizmust, például egy szálbiztos tulajdonságot használjon, amely kezeli a szálbiztos hozzáférést az alapul szolgáló mezőhöz. Tudja meg, hogy az olyan problémák, mint a zárolási versengés és a holtpontok, hatással lehetnek a kódtár teljesítményére és viselkedésére.
Mikor kell letiltani a figyelmeztetéseket?
Ha egy alkalmazást fejleszt, és ezért teljes körű hozzáféréssel rendelkezik a statikus mezőt tartalmazó típushoz, nyugodtan letilthatja a szabály figyelmeztetését. A kódtár tervezőinek nem szabad letiltania a szabály figyelmeztetését; a nem állandó statikus mezők használata megnehezítheti a kódtár megfelelő használatát.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA2211
// The code that's violating the rule is on this line.
#pragma warning restore CA2211
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none
a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA2211.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Példa
Az alábbi példa egy olyan típust mutat be, amely megsérti ezt a szabályt.
Imports System
Namespace ca2211
Public Class SomeStaticFields
' Violates rule: AvoidNonConstantStatic;
' the field is public and not a literal.
Public Shared publicField As DateTime = DateTime.Now
' Satisfies rule: AvoidNonConstantStatic.
Public Shared ReadOnly literalField As DateTime = DateTime.Now
' Satisfies rule: NonConstantFieldsShouldNotBeVisible;
' the field is private.
Private Shared privateField As DateTime = DateTime.Now
End Class
End Namespace
public class SomeStaticFields
{
// Violates rule: AvoidNonConstantStatic;
// the field is public and not a literal.
static public DateTime publicField = DateTime.Now;
// Satisfies rule: AvoidNonConstantStatic.
public static readonly DateTime literalField = DateTime.Now;
// Satisfies rule: NonConstantFieldsShouldNotBeVisible;
// the field is private.
static DateTime privateField = DateTime.Now;
}
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: