Effective C# Item 22: Define Outgoing Interface With Events
Effective C# Item 22: Define Outgoing Interface With Events
事件为我们的类型定义了对外的接口。事件是通过委托来提供类型安全的函数签名。由于大部分情况下我们使用委托的例子都是事件,这使得我们容易将二者混为一谈。在Item 21中,我们举了不定义事件的委托的例子。当我们的类型在系统中必须与多个客户程序进行信息交互时,我们应考虑当使用事件。
我们来考虑一个简单的例子。我们创建一个日志类来调度应用程序中的所有消息。它会接受应用程序资源的所有消息并将其调度给感兴趣的监听者。这个监听者可能是控制台,数据库,系统日志或者其它的什么机制。我们可以像下面这样定义这个类,创建一个事件来处理消息。
public class LoggerEventArgs : EventArgs
{
public readonly string Message;
public readonly int Priority;
public LoggerEventArgs(int p, string m)
{
Priority = p;
Message = m;
Console.WriteLine("loggereventArgs ");
}
}
public delegate void AddMessageEventHandler(object sender, LoggerEventArgs msg);
public class Logger
{
private static Logger _theOnly = null;
static Logger()
{
