我如何将这个C#代码概括为更通用的方法?

时间:2010-07-02 11:32:42

标签: c# delegates types

我的代码中出现了以下多种情况:

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 个答案:

答案 0 :(得分: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开始,您只需指定没有括号的方法名称,编译器就会自动将它包装在委托实例中。

答案 1 :(得分:2)

答案 2 :(得分:1)

您还可以对Christian描述的方法进行扩展方法。

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);