CA2015: Definieer geen finalizers voor typen die zijn afgeleid van MemoryManager<T>
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA2015 |
Titel | Definieer geen finalizers voor typen die zijn afgeleid van MemoryManager<T> |
Categorie | Betrouwbaarheid |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Als waarschuwing |
Oorzaak
Finalizers definiëren voor typen die zijn afgeleid van MemoryManager<T>
Beschrijving van regel
Het toevoegen van een finalizer aan een type dat is afgeleid van MemoryManager<T> , is waarschijnlijk een indicatie van een bug, omdat het suggereert dat een systeemeigen resource die in een Span<T> is uitgeleverd, wordt opgeschoond en mogelijk terwijl deze nog steeds wordt gebruikt door de Span<T>.
Notitie
De MemoryManager<T> klasse is bedoeld voor geavanceerde scenario's. De meeste ontwikkelaars hoeven deze niet te gebruiken.
Schendingen oplossen
Als u de schending wilt oplossen, verwijdert u de finalizerdefinitie.
class DerivedClass <T> : MemoryManager<T>
{
public override bool Dispose(bool disposing)
{
if (disposing)
{
_handle.Dispose();
}
}
...
// Violation occurs, remove the finalizer to fix the warning.
~DerivedClass() => Dispose(false);
}
Wanneer waarschuwingen onderdrukken
Het is veilig om een schending van deze regel te onderdrukken als de bedoeling is om een finalizer te maken voor foutopsporing of validatiedoeleinden.
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 CA2015
// The code that's violating the rule is on this line.
#pragma warning restore CA2015
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.CA2015.severity = none
Als u deze hele categorie regels wilt uitschakelen, stelt u de ernst voor de categorie none
in op in het configuratiebestand.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Reliability.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.