CA1051: Nedeklarujte viditelná pole instance
Vlastnost | Hodnota |
---|---|
ID pravidla | CA1051 |
Název | Nedeklarujte viditelná pole instance |
Kategorie | Návrh |
Oprava způsobující chybu nebo chybu způsobující chybu | Narušující |
Povoleno ve výchozím nastavení v .NET 8 | No |
Příčina
Typ má nesoukromého pole instance.
Ve výchozím nastavení toto pravidlo sleduje jenom externě viditelné typy, ale dá se konfigurovat.
Popis pravidla
Hlavní použití pole by mělo být jako podrobnost implementace. Pole by měla být private
nebo internal
měla být vystavena pomocí vlastností. Přístup k vlastnosti je stejně snadný, jako je přístup k poli, a kód v přístupových objektech vlastnosti se může měnit, když se funkce typu rozbalí, aniž by se zaváděly zásadní změny.
Vlastnosti, které pouze vracejí hodnotu soukromého nebo interního pole, jsou optimalizované tak, aby fungovaly při analýze přístupu k poli; výkon při použití externě viditelných polí místo vlastností je minimální. Externě viditelné odkazuje na public
úrovně přístupnosti , a protected internal
protected
(Public
, Protected
a Protected Friend
v jazyce Visual Basic).
Veřejná pole navíc nemohou být chráněna požadavky propojení. (Požadavky propojení se nevztahují na aplikace .NET Core.)
Jak opravit porušení
Chcete-li opravit porušení tohoto pravidla, nastavte pole private
nebo internal
ho zpřístupněte pomocí externě viditelné vlastnosti.
Kdy potlačit upozornění
Toto upozornění potlačit pouze v případě, že jste si jistí, že uživatelé potřebují přímý přístup k poli. U většinyaplikacích
Spotřebitelé můžou potřebovat přístup k polím v následujících situacích:
- V ovládacích prvcích obsahu webových formulářů ASP.NET.
- Když cílová platforma používá
ref
k úpravě polí, jako jsou architektury MVVM (model-view-viewmodel) pro WPF a UPW.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA1051
// The code that's violating the rule is on this line.
#pragma warning restore CA1051
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA1051.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Zahrnutí nebo vyloučení rozhraní API
Pomocí následujících možností můžete nakonfigurovat, pro které části základu kódu se má toto pravidlo spouštět.
Tyto možnosti můžete nakonfigurovat jenom pro toto pravidlo, pro všechna pravidla, která se vztahují, nebo pro všechna pravidla v této kategorii (Návrh), na která platí. Další informace naleznete v tématu Možnosti konfigurace pravidla kvality kódu.
Zahrnutí konkrétních povrchů rozhraní API
Na základě přístupnosti můžete nakonfigurovat, na kterých částech základu kódu se má toto pravidlo spouštět. Pokud chcete například určit, že pravidlo by se mělo spouštět jenom na neveřejné ploše rozhraní API, přidejte do souboru .editorconfig v projektu následující pár klíč-hodnota:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Vyloučení struktur
Pole (Structure
v jazyce Visual Basic) můžete vyloučit struct
z analýzy.
dotnet_code_quality.ca1051.exclude_structs = true
Příklad
Následující příklad ukazuje typ (BadPublicInstanceFields
), který porušuje toto pravidlo. GoodPublicInstanceFields
zobrazí opravený kód.
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; }
}
}