CA1052: Statyczne typy posiadaczy powinny mieć wartość Static lub NotInheritable

Właściwości Wartość
Identyfikator reguły CA1052
Stanowisko 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 8 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() { }
}