EventArgs类和事件关键字之间是否存在特殊关联?
在所有.NET书中,我已经阅读了实现事件的指南,解释了你需要子类
EventArgs
并使用EventHandler。我在http://msdn.microsoft.com/en-us/library/ms229011.aspx上查找了更多信息,它说“请使用System.EventHandler而不是手动创建新的委托以用作事件处理程序。”我知道使用EventArgs有很重要的理由,但我的问题不是“我应该这样做吗?”,而是“我可以这样做吗?”。
是否有任何理由我不能使用通用委托而不是EventHandler
与我的事件?例如,如果我想要一个强类型的发送者(其他任何人都被那个ann2ѭ惹恼了?)。
为了解释我的意思更好,有什么理由以下不起作用?
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;
}
}
}
没有找到相关结果
已邀请:
3 个回复
郡晒景沧
签名有一些优点: 您可以扩展
参数。如果您想要传递给eventhandler的每个事物都有一个参数,那么这将不起作用。 接受
基类的EventHandler可以订阅遵循约定的任何事件 您可以将扩展方法添加到
,它出现在所有事件中。 返回类型是
。其他返回类型作为事件处理程序没有多大意义。 你遵循惯例。遵循惯例通常是一个好主意,除非你有令人信服的论据。
犁攀富
浆错