CA2015: не определяйте методы завершения для типов, производных от MemoryManager<T>
Свойство | Значение |
---|---|
Идентификатор правила | CA2015 |
Заголовок | Не определяйте методы завершения для типов, производных от MemoryManager<T> |
Категория | Надежность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | Как предупреждение |
Причина
Определение методов завершения для типов, производных от MemoryManager<T>
Описание правила
Добавление метода завершения к типу, производному от MemoryManager<T>, скорее всего, свидетельствует об ошибке, так как предлагается, что собственный ресурс, который мог быть передан в Span<T>, очищен, когда он все еще используется Span<T>.
Примечание.
Класс MemoryManager<T> используется в сложных сценариях. Большинству разработчиков не нужно использовать его.
Устранение нарушений
Чтобы устранить нарушение, удалите определение метода завершения.
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);
}
Когда лучше отключить предупреждения
Если намерение создать метод завершения для отладки или проверки, можно отключить нарушение этого правила.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA2015
// The code that's violating the rule is on this line.
#pragma warning restore CA2015
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none
в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA2015.severity = none
Чтобы отключить эту всю категорию правил, задайте уровень серьезности для категории none
в файле конфигурации.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Reliability.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.