2013-07-25 38 views
1

我有一個創建的HTTP類,如果可能,每次調用HTTP.post()或HTTP.get()時都會附加一個方法。我希望能夠在之前或之後附加活動。將事件添加到方法

我看到這是在很多Web框架(如Wordpress和Symfony)中完成的,但我想在我的WinForms應用程序上做類似的事情。

我在尋找什麼樣的設計模式來達到這個目的,所以我可以去谷歌它。

+2

你只是想通過代碼添加事件嗎? http://msdn.microsoft.com/en-us/library/ms743596.aspx –

+0

@JoeKorolewicz是的。我會立即檢查你的鏈接。 –

+0

@JoeKorolewicz我檢查了鏈接。我知道這樣附加方法。如示例中的按鈕,已經有事件處理程序。我想要做的事情是將事件處理程序構建到我的HTTP類中,以便在HTTP請求之前和/或之後附加事件。 –

回答

4

您可以在您的對象上創建事件並從代碼中的任何位置調用它們。我經常這樣做。

public event EventHandler Getting; 
public event EventHandler Setting; 

void get() 
{ 
    if (Getting != null) 
     Getting.Invoke(this, EventArgs.Empty); 
} 

void post() 
{ 
    if (Setting != null) 
     Setting.Invoke(this, EventArgs.Empty); 
} 

那麼其他類可以處理這些事件是這樣的:

myHttp.Getting += myHttp_Getting; 

public void myHttp_Getting(object sender, EventArgs e) 
{ 

} 

編輯:

你也可以調用事件是這樣的:

void post() 
{ 
    if (Setting != null) 
     Setting(this, EventArgs.Empty); 
} 

你只能從它自己的clas中調用一個事件秒。這不是問題,因爲否則會導致代碼混亂。總是檢查它是否爲空,因爲如果沒有訂戶,它將爲空,並且在調用它時將通過NullReferenceException

+0

這種設計模式叫做什麼?它是觀察者聽衆模式嗎? –

+0

這不是一種設計模式。這是一種語法。此代碼演示事件語法。 – Jordan

+0

'Invoke'也是可選的,即你可以使'Getting(this,EventArgs.Empty)'產生相同的效果。 – luksan