CA2015: Nie należy definiować finalizatorów dla typów pochodzących z klasy MemoryManager<T>

Właściwości Wartość
Identyfikator reguły CA2015
Tytuł Nie należy definiować finalizatorów dla typów pochodzących z klasy MemoryManager<T>
Kategoria Niezawodność
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Jako ostrzeżenie

Przyczyna

Definiowanie finalizatorów dla typów pochodzących z MemoryManager<T>

Opis reguły

Dodanie finalizatora do typu pochodzącego z MemoryManager<T> jest prawdopodobnie wskazaniem usterki, co sugeruje, że zasób macierzysty, który mógł zostać przekazany w obiekcie Span<T> , jest czyszczony i potencjalnie, gdy jest nadal używany przez Span<T>element .

Uwaga

Klasa jest przeznaczona MemoryManager<T> dla zaawansowanych scenariuszy. Większość deweloperów nie musi jej używać.

Jak naprawić naruszenia

Aby naprawić naruszenie, usuń definicję finalizatora.

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);
}

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć naruszenie tej reguły, jeśli intencją jest utworzenie finalizatora na potrzeby debugowania lub walidacji.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

#pragma warning disable CA2015
// The code that's violating the rule is on this line.
#pragma warning restore CA2015

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA2015.severity = none

Aby wyłączyć tę całą kategorię reguł, ustaw ważność dla kategorii na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Reliability.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Zobacz też