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

在ASP.NET中订阅事件的最佳方式是什么?,asp.net,events,event-handling,Asp.net,Events,Event Handling,我做了一些,但没有找到我问题的答案 正如@Canavar指出的,订阅事件有两种方式: 声明性: <asp:Button runat="server" ID="myButton" OnClick="myButton_Click" /> 我以声明方式订阅事件,但很少在默认事件处理程序中使用sender和EventArgs。大多数时候,我都会从事件处理程序调用一个方法 使用委托订阅事件是否更好 myButton.Click += delegate{DoStuff();}; 如果事情

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

正如@Canavar指出的,订阅事件有两种方式:

声明性:

<asp:Button runat="server" ID="myButton" OnClick="myButton_Click" />  
我以声明方式订阅事件,但很少在默认事件处理程序中使用sender和EventArgs。大多数时候,我都会从事件处理程序调用一个方法

使用委托订阅事件是否更好

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

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

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


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

我个人尽可能使用声明式方法。虽然声明式方法和命令式方法都不比其他方法好,但两者都有各自的优点。在大多数情况下,使用声明性方法意味着您在页面行为和页面内容之间具有更大的解耦性和灵活性。无论出于何种原因,如果您需要更改页面内容,使用声明性方法可以在不需要重新编译的情况下为您提供更多的灵活性

这并不意味着命令式方法是无用的。有时无法以声明方式应用处理程序。即动态场景。命令式方法允许您使用代码创建动态内容,并且仍然可以连接事件。使用最适合场景的内容。没有一种合适的方法,两者都有各自的定位。

我最喜欢的:

myButton.Click += myButton_Click;
实际上并不需要EventHandler。此外,如果您是C 3.0,您可以使用lambda:

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

但事实上,不必担心太多。

就是这样,参数不必匹配。myButton.Click+=委托{DoStuff;};很有趣,我不知道。但无论哪种方式,除了丢弃参数提供的信息(以后可能需要)之外,使用匿名委托都不会获得任何好处。我看不出有什么好处。
myButton.Click += (x,a)=>DoStuff();  // something like that.