Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA1070 |
| Заголовок | не объявляйте поля событий как виртуальные |
| Категория | Проектирование |
| Исправление является критическим или не критическим | Срочное |
| Включен по умолчанию в .NET 10 | Как предложение |
| Применимые языки | C# и Visual Basic |
Причина
Событие, похожее на поле, было объявлено как виртуальное.
По умолчанию это правило проверяет только видимые извне типы, но это поведение можно настроить.
Описание правила
Следуйте этим рекомендациям по проектированию .NET, чтобы вызвать события базового класса в производных классах. Не объявляйте виртуальные события в базовом классе. Переопределенные события в производном классе могут иметь неопределенное поведение. Компилятор C# не обрабатывает их корректно, поэтому сложно сказать, будет ли подписчик производного события на самом деле подписываться на событие базового класса.
using System;
public class C
{
// CA1070: Event 'ThresholdReached' should not be declared virtual.
public virtual event EventHandler ThresholdReached;
}
Устранение нарушений
Следуйте этим рекомендациям по проектированию .NET и избегайте виртуальных событий, подобных полям.
Когда лучше отключить предупреждения
Если событие является видимым извне для общедоступного API, который уже является частью поставленной библиотеки, то можно безопасно отключить предупреждение из этого правила, чтобы избежать критических изменений для потребителей библиотеки.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA1070
// The code that's violating the rule is on this line.
#pragma warning restore CA1070
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA1070.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.
Настройка кода для анализа
Используйте следующий параметр, чтобы выбрать части базы кода для применения этого правила.
Этот параметр можно настроить только для этого правила, для всех правил, к которым он применяется, или для всех правил в этой категории (конструкторе), к которым она применяется. Дополнительные сведения см. в статье Параметры конфигурации правила качества кода.
Включите конкретные поверхности API
Вы можете настроить компоненты базы кода для выполнения этого правила на основе их специальных возможностей, задав параметр api_surface. Например, чтобы указать, что правило должно выполняться только для непубличной поверхности API, добавьте следующую пару "ключ-значение" в файл .editorconfig в ваш проект:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Заметка
Замените XXXX частью CAXXXX идентификатором применимого правила.