Правильно объявите обработчики событий
Обновлен: Ноябрь 2007
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);
}
Связанные правила
Проверьте видимые обработчики событий