2

違いは何ですか:

this.btnConnect.Click += btnConnect_Click;

と:

this.btnConnect.Click += new RoutedEventHandler(btnConnect_Click);

どちらの方法でも同じように機能するようですが、Visual Studio IntelliSenseが2番目の例を挿入しているので、その理由に興味があります。

私の最初の推測では、IntelliSenseバージョンを使用すると、各ボタンが独自のインスタンスを呼び出すようになりRoutedEventHandler、スレッドセーフになりますか?そして、最初の例を使用すると、各ボタンはそのメソッドの同じインスタンスを呼び出し、お互いに足を踏み入れる可能性があります。

4

2 に答える 2

3

これは同じことです。最初は単なる構文糖衣です。つまり、コンパイラは両方に対して同じILバイトコードを生成します。常にデリゲートインスタンスが作成されます。

IIRC、C#の最初のバージョンでは最初の構文が許可されていませんでした。C#2.0で導入されました。

于 2012-10-09T22:21:18.090 に答える
0

Lambdaを使用してRoutedEventHandlerを新規作成することもできます。

        new RoutedEventHandler(
            (sendItem, args) =>
            {
                //things you want to do
                IsTopMost = !IsTopMost;
                this.Topmost = IsTopMost;
                ((MenuItem) sendItem).Header = menuWords[0, ++menuClickCount[0]%2];
            })
于 2017-02-20T03:35:04.907 に答える