CA1802: Szükség esetén literálok használata

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";
}