Поделиться через


Правильно объявите обработчики событий

Обновлен: Ноябрь 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);
}

Связанные правила

Проверьте видимые обработчики событий

См. также

Основные понятия

События и делегаты

Ссылки

System.EventArgs

System.Object