2009-02-15 61 views
66

Lấy mã bên dưới:C#: Sự khác nhau giữa '+ = anEvent' và '+ = new EventHandler (anEvent)'

private void anEvent(object sender, EventArgs e) { 
    //some code 
} 

sự khác biệt giữa những điều sau là gì?

[object].[event] += anEvent; 

//and 

[object].[event] += new EventHandler(anEvent); 

[UPDATE]

Rõ ràng, không có sự khác biệt giữa hai ... cựu chỉ là cú pháp đường của cái sau.

+4

Một công cụ như Resharper sẽ khuyên bạn nên loại bỏ mã thừa vì nó chỉ cho biết thêm tiếng ồn. –

+1

bản sao có thể có của [Trình xử lý sự kiện C#] (http://stackoverflow.com/questions/26877/c-sharp-event-handlers) – nawfal

+0

Dòng đầu tiên chỉ có thể được hiểu bởi các lập trình viên C# có kinh nghiệm. Dòng thứ hai có thể được hiểu bởi cả các lập trình viên C# kinh nghiệm và những người mới sử dụng ngôn ngữ này. –

Trả lời

76

Không có sự khác biệt. Trong ví dụ đầu tiên của bạn, trình biên dịch sẽ tự động phỏng đoán đại biểu bạn muốn khởi tạo. Trong ví dụ thứ hai, bạn xác định rõ ràng người được ủy quyền.

Suy luận ủy quyền đã được thêm vào C# 2.0. Vì vậy, đối với các dự án C# 1.0, ví dụ thứ hai là lựa chọn duy nhất của bạn. Đối với các dự án 2.0, ví dụ đầu tiên sử dụng suy luận là những gì tôi muốn sử dụng và thấy trong codebase - vì nó ngắn gọn hơn.

10

Tôi không nghĩ có sự khác biệt. Trình biên dịch biến đổi đầu tiên thành thứ hai.

14
[object].[event] += anEvent; 

chỉ là cú pháp đường cho -

[object].[event] += new EventHandler(anEvent); 
Các vấn đề liên quan