C #: Sự khác biệt giữa '+ = anEvent' và '+ = new EventHandler (anEvent)'


76

Lấy đoạn mã dưới đây:

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

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

[object].[event] += anEvent;

//and

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

[CẬP NHẬT]

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


4
Một công cụ như Resharper sẽ khuyến nghị bạn loại bỏ mã thừa vì nó chỉ thêm nhiễu.
Chris Marisic

1
có thể trùng lặp của C # xử lý tổ chức sự kiện
nawfal

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

@CJDennis - Tôi hiểu quan điểm của bạn, nhưng đây là một lập luận phản bác có thể xảy ra: tốt hơn là sử dụng mô hình mà người mới sẽ gặp phải (hầu như luôn luôn) cho các sự kiện. Nếu không, họ sẽ nhầm lẫn theo một cách khác: tự hỏi tại sao đôi khi họ thấy mã nói "EventHandler mới", và những lần khác thì không.
ToolmakerSteve

Câu trả lời:


81

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 suy ra đại biểu mà bạn muốn khởi tạo. Trong ví dụ thứ hai, bạn xác định rõ ràng đại biểu.

Suy luận đại biểu đã đượ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à xem trong cơ sở mã - vì nó ngắn gọn hơn.


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

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

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

11

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.