Не будь экстремальным.EventHandler(object sender, EventArgs e)
имеет отправителя объекта, поэтому мы можем использовать его во многих случаях.Но это не значит, что типизированный отправитель - это зло.Строго типизированный отправитель полезен, когда этот делегат не будет широко использоваться (например, EventHandler
), например
public delegate void SaveHandler(Controller sender, EventArgs e);
Теперь другие разработчики (или кто-то, использующий вашу библиотеку) могут признать, что отправитель должны быть Controller
, и они будут рады не кодировать вот так:
public void MySaveHandler(object sender, EventArgs arg)
{
var controller = sender as Controller;
if (controller != null)
{
//do something
}
else
{
//throw an exception at runtime?
//It can be avoided if sender is strongly-typed
}
}
И вы даже можете сделать его универсальным:
public delegate void SaveHandler<T>(T sender, EventArgs args)
where T: IController;
Эточисто юридическая и хорошая практика в C #.Вы должны уточнить, что вы хотите сделать, а затем выбрать лучший путь.Любой из них злой / плохой.