2009-09-09 37 views
6

Chỉ cần nhanh chóng: suy nghĩ của mọi người về cách sử dụng các đại biểu Hành động cho các sự kiện lớp công khai so với xác định các loại đại biểu sự kiện riêng? Tôi biết nhiều hành động sử dụng cho các đại biểu "nhỏ" như trong các phương thức mở rộng lamdas và .ForEach(), vv, nhưng đối với các thành viên sự kiện lớp thực tế, đang sử dụng Hành động là một ý tưởng tốt? "Thực hành tốt nhất" trong lĩnh vực này là gì.C#: Hành động đại biểu so với đại biểu rõ ràng

Cảm ơn

+0

http://izlooite.blogspot.com/2011/02/delegates-vs-methods.html –

Trả lời

11

Thay vì hành động, tôi sử dụng EventHandler<TEventArgs> cho bất kỳ tuyên bố sự kiện nào. Nó loại bỏ sự cần thiết cho tôi để xác định loại đại biểu của riêng tôi. Nó cũng có lợi ích bổ sung của việc buộc kiểu dữ liệu được bắt nguồn từ System.EventArgs và do đó phát độc đáo với các mẫu sự kiện .Net.

+1

Nhưng nó buộc bạn phải triển khai thực hiện TEventArgs, ngay cả khi bạn chỉ muốn trả về một giá trị ... Có nói rằng, một [ScalarEventArgs nơi T: struct] sẽ đủ. – Benjol

+0

Việc tuân thủ mô hình sự kiện .NET có thực sự đáng để tạo ra một lớp container kế thừa từ System.EventArgs không? Những gì tôi thực sự bị mất do không tuân theo mô hình này? – MrLane

+3

Một điều có thể xảy ra là nếu bạn cần sau này trả lại một số thông tin bổ sung với sự kiện của bạn, tất cả những gì bạn phải làm là thêm nó vào lớp EventArgs của bạn. Nếu như bạn quay lại nói rằng hành động bạn luôn phải trả về một chuỗi không có vấn đề gì, và nếu bạn thay đổi nó, nó sẽ phá vỡ tất cả mã của bạn sử dụng nó. –

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