Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA1859 |
| Заголовок | Использование конкретных типов, когда это возможно для повышения производительности |
| Категория | Производительность |
| Исправление является критическим или не критическим | неразрывный |
| Представленная версия | .NET 8 |
| Включен по умолчанию в .NET 10 | Как предложение |
| Применимые языки | C# и Visual Basic |
Причина
Код использует типы интерфейса или абстрактные типы, что приводит к ненужным вызовам интерфейса или виртуальным вызовам.
Описание правила
Это правило рекомендует обновить тип определенных локальных переменных, полей, свойств, параметров метода и возвращаемых типов методов из интерфейса или абстрактных типов до конкретных типов, когда это возможно. Использование конкретных типов приводит к повышению качества созданного кода путем минимизации накладных расходов на вызовы виртуальных или интерфейсных методов и возможности встроенного выполнения.
Это правило сообщает только о нарушениях, если существуют виртуальные вызовы или вызовы интерфейса, которые на самом деле можно избежать с помощью конкретного типа.
Устранение нарушений
Обновите типы в соответствии с рекомендациями правила. Как правило, изменение типа не влияет на поведение кода, но повышает его производительность.
Пример
В следующем фрагменте кода показано нарушение CA1859:
abstract class A
{
public virtual void M() { }
}
sealed class B : A
{ }
internal class C
{
private readonly A _a = new B();
public void Trigger()
{
// This performs a virtual call because
// _a is defined as an abstract class.
_a.M();
}
}
Следующий фрагмент кода исправляет нарушение.
abstract class A
{
public virtual void M() { }
}
sealed class B : A
{ }
internal class C
{
private readonly B _b = new B();
public void Trigger()
{
_b.M();
}
}
Когда лучше отключить предупреждения
Подавление предупреждения безопасно, если производительность не является проблемой.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA1859
// The code that's violating the rule is on this line.
#pragma warning restore CA1859
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA1859.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.