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.