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 protected
szintekre public
, és protected internal
(Public
és Protected
Protected 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; }
}
}