CA2015: Keine Finalizer für von MemoryManager<T> abgeleitete Typen definieren
Eigenschaft | Wert |
---|---|
Regel-ID | CA2015 |
Titel | Keine Finalizer für von MemoryManager <T> abgeleitete Typen definieren |
Kategorie | Zuverlässigkeit |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 9 aktiviert | Als Warnung |
Ursache
Definieren von Finalizern für von MemoryManager<T> abgeleitete Typen
Regelbeschreibung
Das Hinzufügen eines Finalizers zu einem von MemoryManager<T> abgeleiteten Typ ist wahrscheinlich ein Hinweis auf einen Fehler, da es darauf hindeutet, dass eine native Ressource, die in einer Span<T>-Struktur hätte ausgegeben werden können, bereinigt wird, während sie möglicherweise noch von der Span<T>-Struktur verwendet wird.
Hinweis
Die MemoryManager<T>-Klasse ist für weiterführende Szenarios bestimmt. Die meisten Entwickler benötigen sie nicht.
Behandeln von Verstößen
Entfernen Sie die Finalizer-Definition, um den Verstoß zu korrigieren.
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);
}
Wann sollten Warnungen unterdrückt werden?
Es ist in Ordnung, einen Verstoß gegen diese Regel zu unterdrücken, wenn ein Finalizer zum Debuggen oder zum Prüfen erstellt werden soll.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA2015
// The code that's violating the rule is on this line.
#pragma warning restore CA2015
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none
fest.
[*.{cs,vb}]
dotnet_diagnostic.CA2015.severity = none
Um diese gesamte Kategorie von Regeln zu deaktivieren, legen Sie den Schweregrad für die Kategorie in der Konfigurationsdatei auf none
fest.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Reliability.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.