Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA1802 |
Cím | Szükség esetén literálok használata |
Kategória | Teljesítmény |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 9-ben | Nem |
Ok
A mező deklarálva static
van és readonly
(Shared
és ReadOnly
a Visual Basicben), és inicializálva van egy olyan értékkel, amely fordításkor kiszámítható.
Ez a szabály alapértelmezés szerint csak külsőleg látható, statikus, olvasható mezőket tekint meg, de ez konfigurálható.
Szabály leírása
A mező értékét static readonly
futásidőben számítja ki a rendszer, amikor meghívja a deklarálási típus statikus konstruktorát. Ha a static readonly
mező inicializálva van a deklarálásakor, és a statikus konstruktor nincs explicit módon deklarálva, a fordító egy statikus konstruktort bocsát ki a mező inicializálásához.
A mezők értékét const
fordításkor számítják ki, és a metaadatokban tárolják, ami javítja a futásidejű teljesítményt egy static readonly
mezőhöz képest.
Mivel a megcélzott mezőhöz rendelt érték fordításkor megbízható, módosítsa a deklarációt egy const
mezőre, hogy az érték fordítási időpontban legyen kiszámítva a futási idő helyett.
Szabálysértések kijavítása
A szabály megsértésének kijavításához cserélje le a módosítókat és static
a readonly
módosítókat a const
módosítóra.
Feljegyzés
A const modifier használata nem ajánlott minden esetben.
Mikor kell letiltani a figyelmeztetéseket?
Biztonságosan letilthatja a szabály figyelmeztetését, vagy letilthatja a szabályt, ha a teljesítmény nem aggasztó.
Figyelmeztetés
A nyilvános vagy külsőleg látható tagok esetében a static readonly
const
való módosítása problémákhoz vezethet.
const
értékek fordításkor függő szerelvényekbe vannak beágyazva, így előfordulhat, hogy a kódtár értékének változásai nem propagálásra kerülnek, ami hibákat okozhat. Ha a tag értéke a jövőben változhat, tiltsa le ezt a szabályt.
Feljegyzés
A const
használata biztonságos private
tagok számára, és általában biztonságos internal
tagok számára, kivéve, ha InternalsVisibleTo
keresztül vagy külön üzembe helyezve vannak.
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 CA1802
// The code that's violating the rule is on this line.
#pragma warning restore CA1802
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.CA1802.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Kód konfigurálása elemzéshez
A következő beállítások segítségével konfigurálhatja, hogy a kódbázis mely részein futtassa ezt a szabályt.
Ezeket a beállításokat konfigurálhatja csak erre a szabályra, az összes szabályra, vagy az ebben a kategóriában szereplő összes szabályra (Teljesítmény), amelyekre vonatkoznak. További információ: Kódminőségi szabály konfigurációs beállításai.
Adott API-felületek belefoglalása
A api_surface beállítással konfigurálhatja, hogy a kódbázis mely részein futtassa a szabályt az akadálymentességük alapján. Ha például meg szeretné adni, hogy a szabály csak a nem nyilvános API-felületen fusson, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Feljegyzés
Cserélje le a XXXX
CAXXXX
részét a vonatkozó szabály azonosítójára.
Kötelező módosítók
Ezt a szabályt úgy konfigurálhatja, hogy felülbírálja a szükséges mezőmódosítókat. Alapértelmezés szerint mindkettő static
readonly
kötelező módosító az elemzett mezőkhöz. Ezt felülbírálhatja egy vesszővel elválasztva, amely egy vagy több módosító értéket tartalmaz az alábbi táblázatból:
Beállítás értéke | Összegzés |
---|---|
none |
Nincs módosító követelmény. |
static vagy Shared |
A Visual Basicben "statikusként" ("Megosztott") kell deklarálni. |
const |
"const"-ként kell deklarálni. |
readonly |
"olvashatóként" kell deklarálni. |
Ha például meg szeretné adni, hogy a szabály statikus és példánymezőkön is fusson, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:
dotnet_code_quality.CA1802.required_modifiers = none
Példa
Az alábbi példa egy olyan típust mutat be, UseReadOnly
amely megsérti a szabályt, és egy olyan típust, UseConstant
amely megfelel a szabálynak.
Imports System
Namespace ca1802
' This class violates the rule.
Public Class UseReadOnly
Shared ReadOnly x As Integer = 3
Shared ReadOnly y As Double = x + 2.1
Shared ReadOnly s As String = "readonly"
End Class
' This class satisfies the rule.
Public Class UseConstant
Const x As Integer = 3
Const y As Double = x + 2.1
Const s As String = "const"
End Class
End Namespace
// This class violates the rule.
public class UseReadOnly
{
static readonly int x = 3;
static readonly double y = x + 2.1;
static readonly string s = "readonly";
public void Print()
{
Console.WriteLine(s);
}
}
// This class satisfies the rule.
public class UseConstant
{
const int x = 3;
const double y = x + 2.1;
const string s = "const";
}