2009-09-26 110 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. 

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

相關問題