イベント ハンドラーをアタッチするこれらの方法の違いを教えてください。
//Method 1
this.button4.Click += new RoutedEventHandler(button4_Click);
//Method 2
this.button4.Click += button4_Click;
...
void button4_Click(object sender, RoutedEventArgs e) { }
イベント ハンドラーをアタッチするこれらの方法の違いを教えてください。
//Method 1
this.button4.Click += new RoutedEventHandler(button4_Click);
//Method 2
this.button4.Click += button4_Click;
...
void button4_Click(object sender, RoutedEventArgs e) { }
アントンが言うように、違いはありません。
もう少し背景として、これはイベントに固有のものではありません。これは、メソッド グループをデリゲートに暗黙的に変換する C# 2.0 の機能の使用例の 1 つにすぎません。したがって、次のように同様に使用できます。
EventHandler handler = button4_click;
C# 2.0 のデリゲートに対するもう 1 つの変更点は、デリゲートがバリアントになったことです。これは、たとえば、EventHandler シグネチャで宣言されたメソッドを MouseEventHandler として使用できることを意味します。
MouseEventHandler handler = button4_click;
もちろん、匿名メソッドもありますが、それはまったく別の球技です:)
これは確かにシンタックス シュガーです (同一の CIL にコンパイルされます)。
最初のアプローチの利点は、使用しているイベント タイプが呼び出しサイトで明示的に示されることです。
2 番目の利点は、デリゲート型が変更されても互換性が保たれている場合、コードを変更する必要がないことです。変更しても互換性がない場合は、イベントに関連付けられている場所ではなく、メソッドを修正するだけで済みます。
いつものように、これはどちらの賛否両論が目の前の状況により役立つかについてのバランスです
まったく違いはありません。2 つ目は、C# 2.0 で追加された構文シュガーです。C# 3.0 では、ラムダはさらに簡潔になります。