CA1051: Nedeklarujte viditelná pole instance

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á 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á 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;
}

Viz také