WEB开发网
开发学院软件开发C语言 Effective C# 原则22:用事件定义对外接口 阅读

Effective C# 原则22:用事件定义对外接口

 2009-02-19 08:16:32 来源:WEB开发网   
核心提示:可以用事件给你的类型定义一些外部接口,事件是基于委托的,Effective C# 原则22:用事件定义对外接口,因为委托可以提供类型安全的函数签名到事件句柄上,加上大多数委托的例子都是使用事件来说明的,系统日志,或者是其它的机制,以至于开发人员一开始都认为委托与事件是一回事,在原则21里

可以用事件给你的类型定义一些外部接口。事件是基于委托的,因为委托可以提供类型安全的函数签名到事件句柄上。加上大多数委托的例子都是使用事件来说明的,以至于开发人员一开始都认为委托与事件是一回事。在原则21里,我已经展示了一些不在事件上使用委托的例子。在你的类型与其它多个客户进行通信时,为了完成它们的行为,你必须引发事件。

一个简单的例子,你正在做一个日志类,就像一个信息发布机一样在应用程序里发布所有的消息。它接受所有从程序源发布的消息,并且把这些消息发布到感兴趣的听众那里。这些听众可以是控制台,数据库,系统日志,或者是其它的机制。就可以定义一个像下面这样的类,当消息到达时来引发事件:

public class LoggerEventArgs : EventArgs
{
 public readonly string Message;
 public readonly int Priority;
 public LoggerEventArgs ( int p, string m )
 {
  Priority = p;
  Message = m;
 }
}
// Define the signature for the event handler:
public delegate void AddMessageEventHandler( object sender,
 LoggerEventArgs msg );
public class Logger
{
 static Logger( )
 {
  _theOnly = new Logger( );
 }
 private Logger( )
 {
 }
 private static Logger _theOnly = null;
 public Logger Singleton
 {
  get
  {
   return _theOnly;
  }
 }
 // Define the event:
 public event AddMessageEventHandler Log;
 // add a message, and log it.
 public void AddMsg ( int priority, string msg )
 {
  // This idiom discussed below.
  AddMessageEventHandler l = Log;
  if ( l != null )
   l ( null, new LoggerEventArgs( priority, msg ) );
 }
}

1 2 3 4  下一页

Tags:Effective 原则 事件

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接