在ASP.NET中订阅事件的最佳方式是什么?

时间:2009-09-26 01:40:09

标签: asp.net events event-handling

我做了一些reading on SO,但没有找到我的问题的答案。

@Canavar指出in his answer有2种订阅活动的方式:

声明:

<asp:Button runat="server" ID="myButton" OnClick="myButton_Click" />  

代码背后:

myButton.Click += new EventHandler(myButton_Click);

我以声明方式订阅事件,但几乎没有在默认事件处理程序中使用“sender”和EventArgs。大多数时候我最终都会从事件处理程序中调用一个方法。

使用委托订阅活动会更好吗?

myButton.Click += delegate{DoStuff();};

如果我过度复杂化,请告诉我,并且应该坚持使用声明性事件订阅,并从默认事件处理程序调用我的DoStuff()方法。

3 个答案:

答案 0 :(得分:3)

您的处理程序需要匹配事件的指定参数。如果您使用委托,您将只是定义相同的事情。丢弃params似乎是一种浪费,因为将来出于某种原因可能需要它们。我想不出任何不想要参数的好理由。

事件处理程序已经是委托:)

答案 1 :(得分:2)

我个人尽可能使用声明式方法。虽然陈述性和强制性方法都不比另一种“更好”,但两者都有其优点。在大多数情况下,使用声明性方法意味着您在页面行为和页面内容之间具有更大的解耦和更大的灵活性。如果您出于某种原因需要更改页面内容,使用声明性方法可以为您提供更多余地,而无需重新编译。

这并不意味着必要的方法毫无用处。有时候无法以声明方式应用处理程序。即动态场景。命令式方法允许您使用代码创建动态内容并仍然连接事件。使用最适合场景的内容。没有一种正确的方法,两者都有自己的利基。

答案 2 :(得分:0)

我的最爱:

myButton.Click += myButton_Click;

实际上并不需要EventHandler。另外,如果你是C#3.0,你可以使用lambda:

myButton.Click += (x,a)=>DoStuff();  // something like that.

但实际上,不值得担心太多。