Share via


CA1052: Statiska hållare ska vara statiska eller inteheritbara

Property Värde
Regel-ID CA1052
Rubrik Statiska hållare ska vara statiska eller inteheritbara
Kategori Designa
Korrigeringen är icke-bakåtkompatibel Bryta
Aktiverad som standard i .NET 8 Nej

Orsak

En icke-abstrakt typ innehåller endast statiska medlemmar (förutom en möjlig standardkonstruktor) och deklareras inte med den statiska eller delade modifieraren.

Som standard tittar den här regeln bara på externt synliga typer, men det kan konfigureras.

Regelbeskrivning

Regel CA1052 förutsätter att en typ som endast innehåller statiska medlemmar inte är utformad för att ärvas, eftersom typen inte tillhandahåller några funktioner som kan åsidosättas i en härledd typ. En typ som inte är avsedd att ärvas ska markeras med static modifieraren i C# för att förbjuda dess användning som bastyp. Dessutom bör dess standardkonstruktor tas bort. I Visual Basic ska klassen konverteras till en modul.

Den här regeln utlöses inte för abstrakta klasser eller klasser som har en basklass. Regeln utlöses dock för klasser som stöder ett tomt gränssnitt.

Kommentar

I den senaste analysimplementeringen av den här regeln omfattar den även funktionerna i regel CA1053.

Så här åtgärdar du överträdelser

Om du vill åtgärda ett brott mot den här regeln markerar du typen som static och tar bort standardkonstruktorn (C#) eller konverterar den till en modul (Visual Basic).

När du ska ignorera varningar

Du kan förhindra överträdelser i följande fall:

  • Typen är utformad för att ärvas. Avsaknaden static av modifieraren tyder på att typen är användbar som bastyp.
  • Typen används som ett typargument. Statiska typer kan inte användas som typargument.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.

Konfigurera kod för analys

Använd följande alternativ för att konfigurera vilka delar av kodbasen som regeln ska köras på.

Du kan konfigurera det här alternativet för bara den här regeln, för alla regler som gäller för eller för alla regler i den här kategorin (design) som den gäller för. Mer information finns i Konfigurationsalternativ för kodkvalitetsregel.

Inkludera specifika API-ytor

Du kan konfigurera vilka delar av kodbasen som ska köras med den här regeln baserat på deras tillgänglighet. Om du till exempel vill ange att regeln endast ska köras mot den icke-offentliga API-ytan lägger du till följande nyckel/värde-par i en .editorconfig-fil i projektet:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Exempel på en överträdelse

I följande exempel visas en typ som bryter mot regeln:

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

Åtgärda med den statiska modifieraren

I följande exempel visas hur du åtgärdar ett brott mot den här regeln genom att markera typen med static modifieraren i C#:

public static class StaticMembers
{
    public static int SomeProperty { get; set; }
    public static void SomeMethod() { }
}