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

Siehe auch