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


CA1051: Látható példánymezők deklarálása

Tulajdonság Érték
Szabályazonosító CA1051
Cím Látható példánymezők deklarálása
Kategória Design
A javítás kompatibilitástörő vagy nem törik Törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Nem

Ok

Egy típus nem privát példánymezővel rendelkezik.

Ez a szabály alapértelmezés szerint csak külsőleg látható típusokat tekint meg, de ez konfigurálható.

Szabály leírása

A mező elsődleges használatának implementálási részletként kell lennie. A mezőknek private tulajdonságokat kell használniuk, vagy internal közzé kell tenni őket. Egy tulajdonsághoz ugyanolyan egyszerű hozzáférni, mint egy mezőhöz, és a tulajdonság tartozékaiban lévő kód is változhat, ahogy a típus funkciói kibővülnek anélkül, hogy kompatibilitástörő módosításokat vezetnek be.

A privát vagy belső mezők értékét csak visszaadó tulajdonságok úgy vannak optimalizálva, hogy egy mező elérésével egyenértékben teljesíthessenek; a tulajdonságok helyett a külsőleg látható mezők használatából származó teljesítménynövekedés minimális. A külsőleg látható az akadálymentességi protectedszintekre public, és protected internal (Publicés ProtectedProtected Friend a Visual Basicben) hivatkozik.

Emellett a nyilvános mezőket nem lehet a hivatkozási követelményekkel védeni. (A csatolási követelmények nem vonatkoznak a .NET Core-alkalmazásokra.)

Szabálysértések kijavítása

A szabály megsértésének kijavításához tegye a mezőt private vagy internal tegye közzé egy külsőleg látható tulajdonság használatával.

Mikor kell letiltani a figyelmeztetéseket?

Csak akkor tiltsa le ezt a figyelmeztetést, ha biztos benne, hogy a felhasználóknak közvetlen hozzáférésre van szükségük a mezőhöz. A legtöbb alkalmazás esetében a közzétett mezők nem biztosítanak teljesítmény- vagy karbantarthatósági előnyöket a tulajdonságokhoz.

A fogyasztóknak a következő helyzetekben lehet szükségük mezőhozzáférésre:

  • ASP.NET Webes űrlapok tartalomvezérlőiben.
  • Amikor a célplatform mezőket ref módosít, például a WPF és az UWP modellnézet-nézetmodell (MVVM) keretrendszereit.

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 CA1051
// The code that's violating the rule is on this line.
#pragma warning restore CA1051

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.CA1051.severity = none

További információ: Kódelemzési figyelmeztetések letiltása.

API-k belefoglalása vagy kizárása

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 (Tervezés) érvényes összes szabályra. További információ: Kódminőségi szabály konfigurációs beállításai.

Adott API-felületek belefoglalása

A kódbázis azon részeit konfigurálhatja, amelyeken futtathatja ezt 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

Szerkezetek kizárása

Kizárhatja struct aStructure (Visual Basic) mezők elemzését.

dotnet_code_quality.ca1051.exclude_structs = true

Példa

Az alábbi példa egy olyan típust (BadPublicInstanceFields) mutat be, amely megsérti ezt a szabályt. GoodPublicInstanceFields a javított kódot jeleníti meg.

public class BadPublicInstanceFields
{
    // Violates rule DoNotDeclareVisibleInstanceFields.
    public int instanceData = 32;
}

public class GoodPublicInstanceFields
{
    private int instanceData = 32;

    public int InstanceData
    {
        get { return instanceData; }
        set { instanceData = value; }
    }
}

Kapcsolódó információk