CA1070: не объявляйте поля событий как виртуальные

Значение
Идентификатор правила CA1070
Категория Оформление
Исправление является критическим или не критическим Критическое

Причина

Событие, похожее на поле, было объявлено как виртуальное.

По умолчанию это правило проверяет только видимые извне типы, но это поведение можно настроить.

Описание правила

Следуйте этим рекомендациям по проектированию .NET, чтобы вызвать события базового класса в производных классах. Не объявляйте виртуальные события в базовом классе. Переопределенные события в производном классе имеют неопределенное поведение. Компилятор C# не обрабатывает их корректно, поэтому сложно сказать, будет ли подписчик производного события на самом деле подписываться на событие базового класса.

using System;
public class C
{
    // CA1070: Event 'ThresholdReached' should not be declared virtual.
    public virtual event EventHandler ThresholdReached;
}

Устранение нарушений

Следуйте этим рекомендациям по проектированию .NET и избегайте виртуальных событий, подобных полям.

Условия для отключения предупреждений

Если событие является видимым извне для общедоступного API, который уже является частью поставленной библиотеки, то можно безопасно отключить предупреждение из этого правила, чтобы избежать критических изменений для потребителей библиотеки.

Настройка кода для анализа

Используйте следующий параметр, чтобы выбрать части базы кода для применения этого правила.

Этот параметр можно настроить только для некоторого правила, для всех правил или для всех правил в этой категории (конструктор). Дополнительные сведения см. в статье Параметры конфигурации правила качества кода.

Включение определенных контактных зон API

Вы можете настроить, для каких частей базы кода следует выполнять это правило в зависимости от их доступности. Например, чтобы указать, что правило должно выполняться только для закрытой контактной зоны API, добавьте следующую пару "ключ-значение" в файл EDITORCONFIG в своем проекте:

dotnet_code_quality.CAXXXX.api_surface = private, internal

См. также раздел