Khi lập trình các sự kiện trong C #, bạn nên tạo một đại biểu dưới dạng:
delegate XEventHandler(object sender, XEventArgs e);
Câu hỏi của tôi là về lập luận đầu tiên của đại biểu object sender
,. Nó luôn luôn phải là một chung chung object
? Có một người gửi loại object
luôn dẫn đến mã tương tự như thế này.
val = ((ConcreteType)sender).Property;
hoặc, thậm chí dài dòng hơn,
ConcreteType obj = sender as ConcreteType
if (obj != null) { ... }
Một lập luận chống lại người gửi được gõ mạnh là các đối tượng khác có thể chuyển tiếp sự kiện mà không phải lo lắng về loại. Mặc dù điều này có thể có ý nghĩa trong môi trường GUI, tôi không chắc liệu nó có thể có lợi ngoài GUI hay không.
Điều gì xảy ra nếu lớp của người gửi luôn được biết đến (ít nhất là một lớp trừu tượng)? Ví dụ, nếu tôi đang thực hiện một ListChanged
sự kiện trong một bản tóm tắt List
lớp, và nếu các lớp khác sẽ thừa kế nó (ví dụ LinkedList
, ArrayList
), nó là tất cả quyền xác định đại biểu của tôi với người gửi là loại List
?
delegate ListChangedEventHander(List sender, ListChangedEventArgs e);
Hoặc, sẽ có một nhược điểm của việc thay đổi thông thường object sender
sang một loại cụ thể hơn?