Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA1051 |
| Název | Nedeklarujte viditelná pole instance |
| Kategorie | Návrh |
| Oprava, která může být destruktivní nebo nedestruktivní | Přerušující |
| Povoleno ve výchozím nastavení v .NET 10 | Ne |
| Příslušné jazyky | C# a Visual Basic |
Příčina
Typ má instanční pole, které není soukromé.
Ve výchozím nastavení toto pravidlo sleduje jenom externě viditelné typy, ale dá se konfigurovat.
Popis pravidla
Primární účel pole by měl být jako detail implementace. Pole by měla být private nebo internal a měla by být zpřístupněna 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 měly stejný výkon jako přístup k poli; nárůst výkonu při použití veřejně viditelných polí místo vlastností je minimální.
Externě viditelné odkazuje na úrovně přístupnosti public, protected a protected internal (Public, Protected a Protected Friend v jazyce Visual Basic).
Veřejná pole navíc nemohou být chráněna linkovými požadavky. (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šiny aplikací neposkytují vystavená pole žádné výkonnostní nebo údržbové výhody oproti vlastnostem.
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á
refk ú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á platí pro, nebo pro všechna pravidla v této kategorii (Návrh), na která se vztahují. Další informace naleznete v tématu Možnosti konfigurace pravidla kvality kódu.
Zahrnutí konkrétních povrchů rozhraní API
Nastavením možnosti api_surface můžete nakonfigurovat, na kterých částech základu kódu se má toto pravidlo spouštět na základě jejich přístupnosti. 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
Poznámka
Nahraďte XXXX část CAXXXX ID příslušného pravidla.
Vyloučení struktur
Pole struct (Structurev jazyce Visual Basic) můžete vyloučit 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
{
public int InstanceData { get; set; } = 32;
}