Che*_*hen 11
不要太极端.EventHandler(object sender, EventArgs e)
有一个对象发送者,以便我们可以在许多情况下使用它.但这并不意味着一个强类型的发送者是邪恶的.当这个委托不被广泛使用时(例如EventHandler
),强类型发送者很有用
public delegate void SaveHandler(Controller sender, EventArgs e);
Run Code Online (Sandbox Code Playgroud)
现在,其他开发人员(或使用您的库的人)可以识别发件人必须是a 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
}
}
Run Code Online (Sandbox Code Playgroud)
你甚至可以把它变成通用的:
public delegate void SaveHandler<T>(T sender, EventArgs args)
where T: IController;
Run Code Online (Sandbox Code Playgroud)
这是C#的纯法律和良好实践.你应该明确你想做什么,然后选择更好的方法.他们中的任何一个都是邪恶的.