2009-09-26 89 views
1

我已经做了一些reading on SO,但没有找到我的问题的答案。在ASP.NET中订阅事件的最佳方式是什么?

由于@Canavar指出in his answer有2种方式来订阅事件:

声明:

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

代码背后:

myButton.Click += new EventHandler(myButton_Click); 

我订阅事件声明,但很少在默认事件处理程序中使用“发件人”和EventArgs。大多数情况下,我最终都是从事件处理函数调用一个方法。

使用委托来订阅事件会更好吗?

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

让我知道如果我在复杂的东西,应该坚持声明事件订阅,并打电话给我DoStuff()从默认的事件处理方法。

回答

3

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

而事件处理程序已经是代表:)

+0

就是这样 - 参数不必匹配。 myButton.Click + =委托{DoStuff();};工作很好 – 2009-09-26 01:55:13

+0

有趣我不知道这一点。但无论如何,通过匿名委托来完成任何事情,除了丢弃信息(由参数提供)之外,以后可能都需要这样做。我看不出有什么优势。 – Kelsey 2009-09-26 02:10:22

2

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

这并不意味着命令式的方法是无用的。有时候不可能声明性地应用处理程序。即动态方案。必要的方法允许您使用代码来创建动态内容并且仍然连接事件。使用最适合该场景的东西。没有一个合适的方法,都有他们的利基。

0

我最喜欢的:

myButton.Click += myButton_Click; 

实际上并不需要的事件处理程序。另外,如果你是C#3.0,你可以去它的lambda:

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

但真的,它不值得担心太多。

相关问题