CA1009: правильно объявите обработчики событий
TypeName |
DeclareEventHandlersCorrectly |
CheckId |
CA1009 |
Категория |
Microsoft.Design |
Критическое изменение |
Критическое изменение |
Причина
Делегат, который обрабатывает открытое или защищенное событие, имеет неправильную подпись, тип возвращаемого значения или имена параметров.
Описание правила
Методы обработчиков событий принимают два параметра. Первый параметр принадлежит типу System.Object и называется "sender". Это объект, вызвавший событие. Второй параметр принадлежит типу System.EventArgs и называется "e". Это данные, связанные с событием. Например, если событие создается при открытии файла, данные события, как правило, содержат имя файла.
Методы обработчиков событий не должны возвращать значение. В языке программирования C# это обозначается типом возвращаемого значения void. Обработчик событий может вызывать несколько методов в нескольких объектах. Если методам разрешено возвращать значения, для каждого события будет возвращаться несколько значений, однако доступным является только значение последнего вызванного метода.
Устранение нарушений
Чтобы устранить нарушение данного правила, исправьте подпись, тип возвращаемого значения или имена параметров делегата. Подробные сведения см. в следующем примере.
Отключение предупреждений
Для этого правила отключать вывод предупреждений не следует.
Пример
В следующем примере показан делегат, который можно использовать в качестве обработчика событий. Подписи методов, которые могут вызываться данным обработчиком событий, соответствуют правилам разработки. AlarmEventHandler — имя типа делегата. AlarmEventArgs наследует от базового класса EventArgs для данных события и содержит данные события оповещения.
Imports System
Namespace DesignLibrary
Public Delegate Sub AlarmEventHandler(sender As Object, e As AlarmEventArgs)
Public Class AlarmEventArgs
Inherits EventArgs
End Class
End Namespace
using System;
namespace DesignLibrary
{
public class AlarmEventArgs : EventArgs {}
public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);
}
using namespace System;
namespace DesignLibrary
{
public ref class AlarmEventArgs : public EventArgs {};
public delegate void AlarmEventHandler(
Object^ sender, AlarmEventArgs^ e);
}
Связанные правила
CA2109: проверьте видимые обработчики событий