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 internalprotected(Public, Protecteda 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 (Structurev 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; }
    }
}

Viz také