CA1052: Statische houdertypen moeten statisch of nietheriteerbaar zijn
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1052 |
Titel | Statische houdertypen moeten statisch of nietheriteerbaar zijn |
Categorie | Ontwerpen |
Oplossing is brekend of niet-brekend | Breken |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
Een niet-abstract type bevat alleen statische leden (behalve een mogelijke standaardconstructor) en wordt niet gedeclareerd met de statische of gedeelde modifier.
Deze regel kijkt standaard alleen naar extern zichtbare typen, maar dit kan worden geconfigureerd.
Beschrijving van regel
Bij regel CA1052 wordt ervan uitgegaan dat een type dat alleen statische leden bevat, niet is ontworpen om te worden overgenomen, omdat het type geen functionaliteit biedt die kan worden overschreven in een afgeleid type. Een type dat niet moet worden overgenomen, moet worden gemarkeerd met de static
modifier in C# om het gebruik ervan als basistype te verbieden. Daarnaast moet de standaardconstructor worden verwijderd. In Visual Basic moet de klasse worden geconverteerd naar een module.
Deze regel wordt niet geactiveerd voor abstracte klassen of klassen die een basisklasse hebben. De regel wordt echter geactiveerd voor klassen die ondersteuning bieden voor een lege interface.
Notitie
In de nieuwste analyse-implementatie van deze regel omvat deze ook de functionaliteit van regel CA1053.
Schendingen oplossen
Als u een schending van deze regel wilt oplossen, markeert u het type als static
en verwijdert u de standaardconstructor (C#) of converteert u deze naar een module (Visual Basic).
Wanneer waarschuwingen onderdrukken
In de volgende gevallen kunt u schendingen onderdrukken:
- Het type is ontworpen om te worden overgenomen. Het ontbreken van de
static
wijzigingsfunctie geeft aan dat het type nuttig is als basistype. - Het type wordt gebruikt als een typeargument. Statische typen kunnen niet worden gebruikt als typeargumenten.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1052
// The code that's violating the rule is on this line.
#pragma warning restore CA1052
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1052.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Code configureren om te analyseren
Gebruik de volgende optie om te configureren op welke onderdelen van uw codebase deze regel moet worden uitgevoerd.
U kunt deze optie configureren voor alleen deze regel, voor alle regels waarop deze van toepassing is, of voor alle regels in deze categorie (ontwerp) waarop deze van toepassing is. Zie de configuratieopties voor de codekwaliteitsregel voor meer informatie.
Specifieke API-oppervlakken opnemen
U kunt instellen op welke onderdelen van uw codebase deze regel moet worden uitgevoerd, op basis van hun toegankelijkheid. Als u bijvoorbeeld wilt opgeven dat de regel alleen moet worden uitgevoerd op het niet-openbare API-oppervlak, voegt u het volgende sleutel-waardepaar toe aan een .editorconfig-bestand in uw project:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Voorbeeld van een schending
In het volgende voorbeeld ziet u een type dat de regel schendt:
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
Oplossing met de statische wijziging
In het volgende voorbeeld ziet u hoe u een schending van deze regel kunt oplossen door het type te markeren met de static
wijzigingsfunctie in C#:
public static class StaticMembers
{
public static int SomeProperty { get; set; }
public static void SomeMethod() { }
}