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 | Brott |
Aktiverad som standard i .NET 9 | 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