2011-05-18 56 views
9

读我的C#的书,它谈论使用事件/委托(我假设我是正确的思维的事件是不具有成员变量访问公共委托相当于)由MS喜欢的模式:我应该使用EventHandler <T>和/或EventArgs委托模式吗?

public delegate Something(object o, EventArgs e) 

然后接着解释有关EventArgs<T>这基本上消除了对委托声明的必要性:

public EventHandler<SomeEventArgs> events 

这是一样的(我认为)

private delegate Something(object o, SomeEventArgs e); 

public event Something events; 

使用EventHandler是个好主意吗?我明白了为什么发送object可能会有用,但并非所有时间 - 而且很多时候,EventArgs可能会变得很烦人。

+3

就我个人而言,我不是目前形式的事件处理程序模式的粉丝。实际上你的最后一句话很好地总结了我的理由。 – ChaosPandion 2011-05-18 17:10:29

回答

9

微软肯定已经推出了一些与C#合作愉快体验的伟大模式。话虽如此,我建议您编写您的事件处理程序以方便您的客户端代码,而不是为了满足某种模式而编写大量代码。

delegate void ClientMessageHandler(IClient client, IMessage message); 
+1

是不是这几乎完全相同,我的第三代码部分,除了IClient而不是对象和IMessage而不是EventArgs?如果是这样,除了必须确保我实现IClient和IMessage之外,我没有看到我从中获得什么...了解我,我错过了一些大事;-) – 2011-05-18 17:22:07

+2

@The Duck Duck - 不同之处在于你是从来不确定'sender'没有检查文档。事件提升者还必须初始化一个'EventArgs'对象来包装'IMessage'实例。这个代表签名本身就是有说服力的。 – ChaosPandion 2011-05-18 17:24:55

+0

另请参阅以下其他方法:http://stackoverflow.com/questions/809609/c-sharp-simple-event-raising-using-sender-vs-custom-eventargs – 2012-08-29 16:15:39