Udostępnij za pośrednictwem


CA1051: Nie deklaruj widocznych pól wystąpień

Właściwości Wartość
Identyfikator reguły CA1051
Tytuł Nie deklaruj widocznych pól instancji
Kategoria Projektowanie
Poprawka łamiąca lub nienaruszająca Przełomowe
Domyślnie włączone na platformie .NET 10 Nie.
Zastosowane języki C# i Visual Basic

Przyczyna

Typ ma pole wystąpienia innego niż prywatne.

Domyślnie ta reguła analizuje tylko typy widoczne zewnętrznie, ale można to skonfigurować.

Opis reguły

Głównym zastosowaniem pola powinno być to, co szczegółowo opisuje implementacja. Pola powinny być private lub internal powinny być uwidocznione za pomocą właściwości. Dostęp do właściwości jest tak prosty jak uzyskanie dostępu do pola, a kod w akcesorze właściwości może ulec zmianie, ponieważ rozszerzają się możliwości typu bez wprowadzania zmian powodujących niezgodność.

Właściwości, które po prostu zwracają wartość pola prywatnego lub wewnętrznego, są zoptymalizowane tak, aby ich wydajność dorównywała dostępowi do pola; zysk wydajności z użycia pól widocznych zewnętrznie zamiast właściwości jest minimalny. Widoczne zewnętrznie odnosi się do publicpoziomów ułatwień dostępu , protectedi protected internal (Public, Protectedi Protected Friend w Visual Basic).

Ponadto pola publiczne nie mogą być chronione przez żądania linków. (Wymagania dotyczące linków nie mają zastosowania do aplikacji platformy .NET Core).

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły, wprowadź pole private lub internal uwidocznij je przy użyciu właściwości widocznej zewnętrznie.

Kiedy pomijać ostrzeżenia

Pomiń to ostrzeżenie tylko wtedy, gdy masz pewność, że konsumenci potrzebują bezpośredniego dostępu do pola. W przypadku większości aplikacji uwidocznione pola nie zapewniają korzyści w zakresie wydajności ani łatwości utrzymania w odniesieniu do właściwości.

Konsumenci mogą potrzebować dostępu do pól w następujących sytuacjach:

  • W kontrolkach zawartości ASP.NET Web Forms.
  • Gdy platforma docelowa używa ref do modyfikowania pól, takich jak struktury model-view-viewmodel (MVVM) dla platform WPF i UWP.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

#pragma warning disable CA1051
// The code that's violating the rule is on this line.
#pragma warning restore CA1051

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA1051.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Dołączanie lub wykluczanie interfejsów API

Użyj poniższych opcji, aby skonfigurować, na które części bazy kodu ma być stosowana ta reguła.

Możesz skonfigurować te opcje tylko dla tej reguły, dla wszystkich reguł, do których mają zastosowanie, lub dla wszystkich reguł w tej kategorii (Design), do których mają zastosowanie. Aby uzyskać więcej informacji, zobacz Opcje konfiguracji reguły jakości kodu.

Uwzględnij określone powierzchnie interfejsu API

Możesz skonfigurować, na które części bazy kodu ma być stosowana ta reguła, na podstawie ich poziomu dostępu, ustawiając opcję api_surface. Aby na przykład określić, że reguła powinna być uruchamiana tylko na powierzchni niepublicznego interfejsu API, dodaj następującą parę klucz-wartość do pliku editorconfig w projekcie:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Notatka

Zastąp część XXXXCAXXXX identyfikatorem odpowiedniej reguły.

Wyklucz struktury

Możesz wykluczyć struct pola (Structure w Visual Basic) z analizowanych.

dotnet_code_quality.ca1051.exclude_structs = true

Przykład

W poniższym przykładzie przedstawiono typ (BadPublicInstanceFields), który narusza tę regułę. GoodPublicInstanceFields wyświetla poprawiony kod.

public class BadPublicInstanceFields
{
    // Violates rule DoNotDeclareVisibleInstanceFields.
    public int instanceData = 32;
}

public class GoodPublicInstanceFields
{
    public int InstanceData { get; set; } = 32;
}

Zobacz też