代码之家  ›  专栏  ›  技术社区  ›  Jonno

我如何将这个C代码推广到一个更通用的方法中?

  •  3
  • Jonno  · 技术社区  · 16 年前

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

    有人知道A型和B型应该是什么吗?或者用另一种方法来实现我的目标?

    3 回复  |  直到 16 年前
        1
  •  3
  •   Christian Hayter    16 年前

    在输入参数上使用委托类型,如下所示:

    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开始,只需指定不带括号的方法名,编译器就会自动将其包装到委托实例中。

        2
  •  2
  •   this. __curious_geek    16 年前
        3
  •  1
  •   Tiju John    16 年前

    您还可以对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);