CA1070: Gebeurtenisvelden niet declareren als virtueel
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1070 |
Titel | Gebeurtenisvelden niet declareren als virtueel |
Categorie | Ontwerpen |
Oplossing is brekend of niet-brekend | Breken |
Standaard ingeschakeld in .NET 9 | Als suggestie |
Oorzaak
Een veldachtige gebeurtenis is gedeclareerd als virtueel.
Deze regel kijkt standaard alleen naar extern zichtbare typen, maar dit kan worden geconfigureerd.
Beschrijving van regel
Volg deze ontwerprichtlijnen voor .NET om basisklassegebeurtenissen in afgeleide klassen te genereren. Declareer geen virtuele gebeurtenissen in een basisklasse. Overschreven gebeurtenissen in een afgeleide klasse hebben niet-gedefinieerd gedrag. De C#-compiler verwerkt dit niet correct en het is onvoorspelbaar of een abonnee van de afgeleide gebeurtenis zich daadwerkelijk abonneert op de basisklassegebeurtenis.
using System;
public class C
{
// CA1070: Event 'ThresholdReached' should not be declared virtual.
public virtual event EventHandler ThresholdReached;
}
Schendingen oplossen
Volg deze .NET-ontwerprichtlijnen en vermijd virtuele veldachtige gebeurtenissen.
Wanneer waarschuwingen onderdrukken
Als de gebeurtenis een extern zichtbare openbare API is die al deel uitmaakt van een verzonden bibliotheek, is het veilig om een waarschuwing van deze regel te onderdrukken om te voorkomen dat de bibliotheekgebruikers fouten veroorzaken.
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 CA1070
// The code that's violating the rule is on this line.
#pragma warning restore CA1070
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.CA1070.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