2012-05-02 58 views
2

我在样板代码中看到很多重复的以下参数,但我似乎没有使用它们呢?为什么这些参数是事件的默认值?

(object sender, EventArgs e)

e.g如果我在一个新的按钮,依次双击事件的方法有这些参数,然而,当我将代码添加到方法我不使用的参数。

他们是什么?我什么时候使用它们?

回答

7

发件人是事件的发起者 - 因此,您可能有多个使用相同点击处理程序的按钮,例如,您想禁用任何按钮被点击的按钮。当然,如果您只使用事件处理程序订阅单个来源的事件,这并不是非常有用。

EventArgs本身是非常没有意义的,因为它没有信息 - 但它用作其他类这有信息(如键盘和鼠标信息)的基类。有它的好处是,如果不需要需要额外的信息,您可以创建一个事件处理程序,可用于订阅任何遵循该模式的事件事件。例如:

button.Click += LogEvent;  // EventHandler delegate type 
textArea.KeyDown += LogEvent; // KeyEventHandler delegate type 

... 

private static void LogEvent(object sender, EventArgs ignored) 
{ 
    Control control = (Control) sender; 
    Log("Event fired by " + control.Name); 
} 
+0

我怀疑作为语言的新手我可以保留您的答案以后再提及吗?即,直到我完全理解事件和代表我应该接受这些参数作为默认的某些方法。 – whytheq

+0

值得补充的是,在.net框架中有一个预定义的委托,用于具有(object,EventArgs)参数的事件。所以用户在使用这种事件时不需要创建委托。 –

+1

@Romil - cool;所以用这个签名创建一个事件将意味着有一个后台代理 – whytheq

相关问题