Share via


CA1070: Deklarera inte händelsefält som virtuella

Property Värde
Regel-ID CA1070
Title Deklarera inte händelsefält som virtuella
Kategori Designa
Korrigeringen är icke-bakåtkompatibel Bryta
Aktiverad som standard i .NET 8 Som förslag

Orsak

En fältliknande händelse deklarerades som virtuell.

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

Regelbeskrivning

Följ dessa designriktlinjer för .NET för att skapa basklasshändelser i härledda klasser. Deklarera inte virtuella händelser i en basklass. Åsidosättande händelser i en härledd klass har odefinierat beteende. C#-kompilatorn hanterar inte detta korrekt och det är oförutsägbart om en prenumerant på den härledda händelsen faktiskt prenumererar på basklasshändelsen.

using System;
public class C
{
    // CA1070: Event 'ThresholdReached' should not be declared virtual.
    public virtual event EventHandler ThresholdReached;
}

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

Följ dessa designriktlinjer för .NET och undvik virtuella fältliknande händelser.

När du ska ignorera varningar

Om händelsen är ett externt synligt offentligt API som redan är en del av ett levererat bibliotek är det säkert att ignorera en varning från den här regeln för att undvika en icke-bakåtkompatibel ändring för bibliotekskonsumenterna.

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 CA1070
// The code that's violating the rule is on this line.
#pragma warning restore CA1070

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.CA1070.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

Se även