Megosztás a következőn keresztül:


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 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 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ó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 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. 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, 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";
}