2011-07-11 15 views
2

可能性の重複:C#の.NET 3.5では
C#: Difference between ' += anEvent' and ' += new EventHandler(anEvent)'イベントに割り当てるときの暗黙のデリゲート割り当て?

、コンパイラは、私がこれを行う場合(ButtonClickHandlerが関数であると仮定)気にしない:

button.OnButtonClicked += ButtonClickHandler; 

または:

button.OnButtonClicked += new ButtonClickHandlerDelegate(ButtonClickHandler); 

これらは機能的に同じですか?私は以下のstackoverflowの質問を読んで、私はそれは同様に、このシナリオに適用されるかはわからない:C#4で

The difference between implicit and explicit delegate creation (with and without generics)

+0

私はそれを削除することができないので、私は自分の質問を閉じるために投票しました。 stackoverflowの検索は恐ろしいので、私はあなたにリンクしている役に立つ質問を見つけることができませんでした。 –

答えて

2

はい、最初のものは単純に後者の構文糖です。コンパイラは単純にデリゲートの型を推定し、それを構築します。コンパイラによって正確に同じILが放出されます。

まず、短いとクリーンな構文(デリゲート推論 - 私はあなたが読みやすくするために使用をお勧めします)、C#2で追加されました - いくつかのデザイナー(Microsoftの)が長く、より冗長を使用する傾向がある理由ですデリゲートを作成するnewの構文

実際、これはthis prior questionの複製であると思います。

+0

重複して申し訳ありません。それは、stackoverflowの検索を使用して同様の質問を見つけるために首にそのような痛みです。 –

+0

実際、それについて考えてみるとあなたの質問は前のものよりも良いと信じています - タイトルに関連性の高い単語(_delegate_、_implicit_)が含まれているため、 。 – driis

1

これは、同一のコードが生成されますので、はい、彼らは機能的に同じです。 最初の(短い)形式では、コンパイラはメソッド署名からデリゲート型を推論します。これにより、明示的に行う必要がなくなります。