When programming events in C#, it is advised to create a delegate in form of:delegate XEventHandler(object sender, XEventArgs e);My question is on the first argument of the delegate, object sender. Does it always have to be a generic object? Having a sender of type object always results in code similar to this.val = ((ConcreteType)sender).Property;or, even more verbose,ConcreteType obj = sender as ConcreteTypeif (obj != null) { ... }One argument against strongly typed senders is that other objects can forward the event without worrying about the type. While this might make sense in GUI environments, I am not sure if it could benefit outside a GUI.What if the class of the sender is always known (at least as an abstract class)? For example, if I am implementing a ListChanged event in an abstract List class, and if other classes are going to inherit it (e.g. LinkedList, ArrayList), is it all right to define my delegate with a sender of type List?delegate ListChangedEventHander(List sender, ListChangedEventArgs e);Or, would there be a downside of changing the conventional object sender to a more specific type?
Should the sender of an event always be a generic Object?
c#;event