2009-12-10 14 views
10

新しいイベントハンドラの作成とイベントへの直接割り当ての実際の違いとメリットとデメリットは何ですか?新しいハンドラを使用したイベントハンドラのアタッチ対直接割り当て

C#2.0以上で
_gMonitor.CollectionChanged += OnCollectionChanged; 
+0

[C#: '+ = anEvent'と '+ = new EventHandler(anEvent)'の違い](http://stackoverflow.com/questions/550703/c-difference-between-anevent-and- new-eventhandleranevent) – nawfal

答えて

10

VS

_gMonitor.CollectionChanged += new NotifyCollectionChangedEventHandler(OnCollectionChanged); 

、それらは同一です。 C#1.2(.NET 1.1に付属)では、最初の構文(new)のみがコンパイルされます。-p

2番目の構文では、キーの押下は保存されますが、通常VS intellisenseが最初を推奨します。結局のところ、それはほとんど違いがありません。私は一般に、コードサンプルのオンラインで2番目の構文を使用しています。なぜなら、(狭い)列幅を超えることを避けるからです。

+0

私は最初のものがメモリリークの問題を引き起こすと思いますが、これを証明するものは何も見つかりません。しかし、私は過去にこのような問題に直面していましたが、 'timer.Tick + = new Handler_Tick(timer_TickMethod);'は 'timer.Tick + = timer_TickMethod; 'ではなく、 .Tick + =新しいHandler_Tick(timer_TickMethod); '。 –

+0

@HarshBaidあなたは間違っています。彼らは***正確に***同じことをコンパイルします。 infoの場合、デリゲートのサブスクリプションはMethodInfoと* instance *の一致に基づいています。 –

+0

'_gMonitor.CollectionChanged - = OnCollectionChanged'または' _gMonitor.CollectionChanged + = new NotifyCollectionChangedEventHandler(OnCollectionChanged) 'について、実際のデリゲートインスタンスを正しく登録する必要はありません。 –

3

コンパイラにはnew EventHandlerを有効にするのに十分な情報があります。syntactic sugarです。あなたが何をすべきか、それを伝える必要がありませんので、それはあなただけ+=-=として、イベントにイベントハンドラをアタッチしていることを知っている

は、この時点で有効です。

関連する問題