Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA2015 |
| Titel | Definieer geen finalizers voor typen die zijn afgeleid van MemoryManager<T> |
| Categorie | Betrouwbaarheid |
| Fix kan brekend of niet-brekend zijn | Niet-brekend |
| Standaard ingeschakeld in .NET 10 | Als waarschuwing |
| Toepasselijke talen | C# en Visual Basic |
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 native resource die is uitgedeeld in een Span<T> wordt opgeruimd en mogelijk terwijl deze nog in gebruik is door de Span<T>.
Notitie
De MemoryManager<T> klasse is bedoeld voor geavanceerde scenario's. De meeste ontwikkelaars hoeven deze niet te gebruiken.
Hoe schendingen op te lossen
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 voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.