2009-12-10 19 views
10

Sự khác biệt, lợi thế và bất lợi thực tế của việc tạo trình xử lý sự kiện mới là gì, so với gán trực tiếp cho sự kiện?Gắn Eventhandler với Trình xử lý mới và Chỉ định trực tiếp

_gMonitor.CollectionChanged += new NotifyCollectionChangedEventHandler(OnCollectionChanged); 

vs

_gMonitor.CollectionChanged += OnCollectionChanged; 
+0

bản sao có thể có của [C#: Sự khác biệt giữa '+ = anEvent' và '+ = new EventHandler (anEvent)'] (http://stackoverflow.com/questions/550703/c-difference-between-anevent-and- new-eventhandleranevent) – nawfal

Trả lời

10

Trong C# 2.0 trở lên, họ giống hệt nhau. Trong C# 1.2 (được chuyển với .NET 1.1), chỉ cú pháp đầu tiên (với new) biên dịch ;-p

Cú pháp thứ hai lưu các lần nhấn phím, nhưng VS intellisense thường sẽ gợi ý đầu tiên. Cuối cùng, nó tạo ra rất ít sự khác biệt. Tôi thường sử dụng cú pháp thứ hai trong mã mẫu trực tuyến, đơn giản vì nó tránh đi qua chiều rộng cột (hẹp)!

+0

Tôi nghĩ người đầu tiên tạo ra các vấn đề rò rỉ bộ nhớ, nhưng tôi không thể tìm thấy bất cứ điều gì để chứng minh điều này. Nhưng tôi đã phải đối mặt với vấn đề như vậy trong quá khứ các cửa sổ dịch vụ đã không đóng cửa chỉ vì 'timer.Tick + = new Handler_Tick (timer_TickMethod);' không phải là 'timer.Tick + = timer_TickMethod;' và unsubscribing là không hữu ích do đó với 'timer .Tick + = new Handler_Tick (timer_TickMethod); '. –

+0

@HarshBaid bạn không chính xác; chúng biên dịch thành *** chính xác cùng một thứ. Để biết thông tin, việc hủy đăng ký ủy nhiệm dựa trên một kết quả trùng khớp trên MethodInfo và * instance *; nó không cần phải là cùng một cá thể ủy nhiệm thực tế để hủy đăng ký một cách chính xác –

+0

làm thế nào về '_gMonitor.CollectionChanged - = OnCollectionChanged' hoặc' _gMonitor.CollectionChanged + = new NotifyCollectionChangedEventHandler (OnCollectionChanged) ', nó có hoạt động với tùy chọn đầu tiên không? –

3

Trình biên dịch có đủ thông tin để làm cho new EventHandler hiệu quả syntactic sugar.

Nó biết rằng bạn đang gắn một trình xử lý sự kiện vào một sự kiện, vì chỉ +=-= mới hợp lệ tại thời điểm này, vì vậy bạn không cần phải cho biết phải làm gì.

Các vấn đề liên quan