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 romboló vagy nem romboló | Nem törés |
| Alapértelmezés szerint engedélyezve a .NET 10-ben | Nem |
| Alkalmazandó nyelvek | C# és Visual Basic |
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ási időben kiszámítható, módosítsa a deklarációt egy const mezőre, hogy az érték a fordítási időben legyen kiszámítva a futásidő helyett.
Szabálysértések kijavítása
A szabály megsértésének kijavításához cserélje le a static és readonly módosítókat a const módosítóra.
Megjegyzés
A const modifier használata nem ajánlott minden esetben.
Mikor kell letiltani a figyelmeztetéseket?
Biztonságosan figyelmen kívül hagyhatja a szabály figyelmeztetését, vagy letilthatja a szabályt, ha a teljesítmény nem fő szempont.
Figyelmeztetés
A nyilvános vagy külsőleg látható tagok esetében a static readonlyconst 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önyvtár értékének változásai nem biztos, hogy propagálódnak, ami hibákat okozhat. Ha a tag értéke a jövőben változhat, tiltsa le ezt a szabályt.
Megjegyzés
A const használata biztonságos private tagok számára, és internal tagok számára is általában biztonságos, kivéve, ha InternalsVisibleTo keresztül vannak kitéve vagy külön üzembe helyezve.
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
Megjegyzés
Cserélje le a XXXXCAXXXX 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ő staticreadonly kötelező módosító az elemzett mezőkhöz. Felülírhatja ezt egy vesszővel elválasztott lista szerint, 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, UseReadOnlyamely megsérti a szabályt, és egy olyan típust, UseConstantamely 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";
}