xem xét:Đăng ký một hành động cho bất kỳ loại sự kiện thông qua phản ánh
someControl.Click += delegate { Foo(); };
Những lập luận về sự kiện này là không thích hợp, tôi không cần họ và tôi không quan tâm đến họ. Tôi chỉ muốn Foo() được gọi. Không có cách rõ ràng để làm tương tự thông qua sự phản ánh.
Tôi muốn dịch trên vào một cái gì đó dọc theo dòng của
void Foo() { /* launch missiles etc */ }
void Bar(object obj, EventInfo info)
{
Action callFoo = Foo;
info.AddEventHandler(obj, callFoo);
}
Ngoài ra, tôi không muốn làm cho giả định rằng các loại đối tượng truyền cho Bar nghiêm chỉnh tuân thủ các nguyên tắc của sử dụng ký hiệu EventHander (TArgs) cho các sự kiện. Nói một cách đơn giản, tôi đang tìm cách đăng ký một hành động cho bất kỳ loại trình xử lý nào; ít đơn giản hơn, một cách để chuyển đổi ủy nhiệm Hành động thành một đại biểu của loại trình xử lý dự kiến.
+1 Để khởi chạy missles! – Jason
Bạn sẽ mong đợi điều gì xảy ra nếu loại đại biểu được sử dụng cho sự kiện có loại trả về không có giá trị hoặc tham số 'out'? –
@JonSkeet Điểm tốt, tôi đã không thực sự xem xét nó; các tham số và giá trị trả lại không thực sự hữu ích cho các sự kiện. Nhưng tôi sẽ mong đợi một lỗi chuyển đổi, một ngoại lệ, vv Về cơ bản tôi muốn giả định rằng những loại đó sẽ không được sử dụng như trình xử lý sự kiện cho sự tỉnh táo của riêng tôi. – Siege