Как бы я обобщил этот код C # в более общий метод? - PullRequest
3 голосов
/ 02 июля 2010

В моем коде встречается множество следующих случаев:

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 ]

3 голосов
/ 02 июля 2010

Используйте тип делегата для входных параметров, например:

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 голосов
/ 02 июля 2010

TYPEA и TYPEB имеют значение WebBrowserDocumentCompletedEventArgs

1 голос
/ 02 июля 2010

Вы также можете создать метод расширения метода, описанного Кристианом.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...