sma*_*man 5 .net c# events event-handling eventargs
在所有.NET书中,我已经阅读了实现事件的指南,解释了您需要子类化EventArgs并使用EventHandler.我在http://msdn.microsoft.com/en-us/library/ms229011.aspx上查找了更多信息,它说"请使用System.EventHandler而不是手动创建新的委托以用作事件处理程序." 我知道使用EventArgs有很重要的理由,但我的问题不是"我应该这样做吗?",而是"我可以这样做吗?".
有什么理由不能使用通用委托代替EventHandler我的事件吗?例如,如果我想要一个强类型的发送者(其他人对此感到恼火object sender?).
为了解释我的意思更好,有什么理由以下不起作用?
public class IoC
{
public AbstractFactory GetAbstractFactory()
{
var factory = new AbstractFactory();
factory.CreateObject += ()=>new object();
return factory;
}
}
public class AbstractFactory
{
public event Func<object> CreateObject;
private object OnObjectCreated()
{
if(CreateObject == null)
{
throw new Exception("Not injected.");
}
return CreateObject();
}
private object _injectedObject;
public object InjectedObject
{
get
{
if(_injectedObject == null)
{
_injectedObject = OnObjectCreated();
}
return _injectedObject;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这只是惯例,并没有语言要求.您可以将任何委托类型用作事件.
标准EventHandler<T>签名虽然有以下几个优点:
EventArgs参数.如果您想要传递给eventhandler的每个事物都有一个参数,那么这将不起作用.EventArgs基类的EventHandler 可以订阅遵循约定的任何事件EventHandler<T>在所有事件上显示的扩展方法.void.其他返回类型作为事件处理程序没有多大意义.| 归档时间: |
|
| 查看次数: |
297 次 |
| 最近记录: |