Delen via


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 8 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

Zie ook