CA1052: Statyczne typy posiadaczy powinny mieć wartość Static lub NotInheritable
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA1052 |
Tytuł | Statyczne typy posiadaczy powinny być statyczne lub niewzględne |
Kategoria | Projekt |
Poprawka powodująca niezgodność lub niezgodność | Kluczowa |
Domyślnie włączone na platformie .NET 9 | Nie. |
Przyczyna
Typ nie abstrakcyjny zawiera tylko statyczne elementy członkowskie (inne niż możliwy konstruktor domyślny) i nie jest zadeklarowany za pomocą modyfikatora statycznego lub współużytkowanego .
Domyślnie ta reguła analizuje tylko typy widoczne zewnętrznie, ale można to skonfigurować.
Opis reguły
Reguła CA1052 zakłada, że typ zawierający tylko statyczne elementy członkowskie nie jest przeznaczony do dziedziczenia, ponieważ typ nie zapewnia żadnych funkcji, które można zastąpić w typie pochodnym. Typ, który nie ma być dziedziczony, powinien być oznaczony modyfikatorem static
w języku C#, aby uniemożliwić jego użycie jako typ podstawowy. Ponadto należy usunąć jego konstruktor domyślny. W języku Visual Basic klasa powinna zostać przekonwertowana na moduł.
Ta reguła nie jest uruchamiana dla klas abstrakcyjnych ani klas, które mają klasę bazową. Jednak reguła jest uruchamiana dla klas, które obsługują pusty interfejs.
Uwaga
W najnowszej implementacji tej reguły analizatora obejmuje ona również funkcjonalność reguły CA1053.
Jak naprawić naruszenia
Aby naprawić naruszenie tej reguły, oznacz typ jako static
i usuń konstruktor domyślny (C#) lub przekonwertuj go na moduł (Visual Basic).
Kiedy pomijać ostrzeżenia
Naruszenia można pominąć w następujących przypadkach:
- Typ jest przeznaczony do dziedziczenia. Brak
static
modyfikatora sugeruje, że typ jest przydatny jako typ podstawowy. - Typ jest używany jako argument typu. Typy statyczne nie mogą być używane jako argumenty typu.
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 CA1052
// The code that's violating the rule is on this line.
#pragma warning restore CA1052
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA1052.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.
Konfigurowanie kodu do analizowania
Użyj następującej opcji, aby skonfigurować, które części bazy kodu mają być uruchamiane w tej regule.
Tę opcję można skonfigurować tylko dla tej reguły, dla wszystkich reguł, do których ma ona zastosowanie, lub dla wszystkich reguł w tej kategorii (Projekt), których dotyczy. 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órych częściach bazy kodu ma być uruchamiana ta reguła, na podstawie ich ułatwień dostępu. 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
Przykład naruszenia
W poniższym przykładzie pokazano typ naruszający regułę:
public class StaticMembers
{
public static int SomeProperty { get; set; }
public static void SomeMethod() { }
}
Imports System
Namespace ca1052
Public Class StaticMembers
Shared Property SomeProperty As Integer
Private Sub New()
End Sub
Shared Sub SomeMethod()
End Sub
End Class
End Namespace
Poprawka za pomocą modyfikatora statycznego
W poniższym przykładzie pokazano, jak naprawić naruszenie tej reguły, oznaczając typ modyfikatorem static
w języku C#:
public static class StaticMembers
{
public static int SomeProperty { get; set; }
public static void SomeMethod() { }
}