Как объявить обработчики событий для передачи правила FxCop, особенно о включении отправителя и e? - PullRequest
2 голосов
/ 23 апреля 2009

FxCop жалуется на объявление обработчика событий, которое у меня есть. Я не вижу, что не так с кодом, несмотря на то, что прочитал предупреждение несколько раз.

Код в моем пользовательском элементе управления

//This next line Fx Cops doesn't like.
public event ImageClickEventHandler NewEntity; //A thingy defined in the BCL

private void ImgBtnAdd_Click(object sender, ImageClickEventArgs e)
{
     NewEntity(sender, e);
}

Код на странице, использующий элемент управления

protected override void OnInit(EventArgs e)
{
EntitySearch1.NewEntity += EntitySearch1_NewEntity;
//etc.
}

Но FxCop говорит:

По соглашению, события .NET имеют два параметра, которые определяют отправителя и данные события. Подписи обработчика событий должны иметь следующую форму: void MyEventHandler (отправитель объекта, EventArgs e). Параметр 'sender' всегда имеет тип System.Object, даже если возможно использовать более конкретный тип. Параметр 'e' всегда имеет тип System.EventArgs. События, которые не предоставляют данные о событиях, должны использовать тип делегата System.EventHandler. Обработчики событий возвращают void, чтобы они могли отправлять каждое событие нескольким целевым методам. Любое значение, возвращаемое целью, будет потеряно после первый звонок.

Ответы [ 2 ]

2 голосов
/ 23 апреля 2009

Мне кажется обманным - параметр 'e' определенно не всегда EventArgs; это просто условно тип, производный от EventArgs.

ImageClickEventArgs происходит от EventArgs, так что это выглядит хорошо для меня. Я подозреваю, что FxCop немного строже, чем должен быть.

1 голос
/ 12 июля 2011

Согласно этой статье MSDN , FxCop требует, чтобы вы указали EventHandler

...