2010-07-02 22 views
3

我在我的代碼下面的許多事件:我如何將這個C#代碼推廣到更一般的方法?

this.webBrowserCtrl.DocumentCompleted -= new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.LoginScreenLoaded); 
this.webBrowserCtrl.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.AttemptLoginAnalysis); 

我想刪除此並用一個簡單的方法,它採用2個輸入 - 但是我不知道這個類型是什麼。

private void DefineNewDocumentCompletedHandler(TYPEA inputA, TYPEB inputB) 
    { 

     this.webBrowserCtrl.DocumentCompleted -= new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(inputA); 
     this.webBrowserCtrl.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(inputB); 

    } 

有人知道TYPEA和TYPEB應該是什麼嗎?或者另一種方式來實現我的目標?

回答

3

使用委託類型的輸入參數,例如:使用的

private void DefineNewDocumentCompletedHandler(WebBrowserDocumentCompletedEventHandler inputA, WebBrowserDocumentCompletedEventHandler inputB) 
{ 
    this.webBrowserCtrl.DocumentCompleted -= inputA; 
    this.webBrowserCtrl.DocumentCompleted += inputB; 
} 

實施例:

DefineNewDocumentCompletedHandler(this.LoginScreenLoaded, this.AttemptLoginAnalysis); 

語法new <delegate type>(<name of method>)是C#的1.x構建體,其是現在已過時。從C#2.0開始,您只需指定沒有括號的方法名稱,編譯器就會自動將其包裝在代理實例中。

+0

非常感謝,特別是對提供的實際代碼:-) – Jonno 2010-07-02 11:49:21

2
+0

__curious_geek - 非常感謝你,如果我能接受2個回答我也會接受你的。 – Jonno 2010-07-02 11:48:55

+0

@Jonno:謝謝,Christian的回答比較好。 – 2010-07-02 11:51:51

1

您也可以通過基督教所描述的方法的擴展方法。

public static void DefineNewDocumentCompletedHandler(this WebBrowser webBrowser, WebBrowserDocumentCompletedEventHandler inputA, WebBrowserDocumentCompletedEventHandler inputB) 
{ 
webBrowser.webBrowserCtrl.DocumentCompleted -= inputA; 
webBrowser.webBrowserCtrl.DocumentCompleted += inputB; 

}

,並使用它像

this.webBrowserCtrl.DefineNewDocumentCompletedHandler(this.LoginScreenLoaded, this.AttemptLoginAnalysis); 
+0

這是一個非常漂亮的想法,不幸的是我需要瞄準.net 2.0 - 但謝謝你的想法! – Jonno 2010-07-02 11:55:56

相關問題