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

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

 2009-02-19 08:16:32 来源:WEB开发网   
核心提示: 另一个类可以直接输出到系统事件日志:class EventLogger{private static string eventSource;private static EventLog logDest;static EventLogger(){logger.Log +=new AddMe

另一个类可以直接输出到系统事件日志:

class EventLogger
{
 private static string eventSource;
 private static EventLog logDest;
 static EventLogger()
 {
  logger.Log +=new AddMessageEventHandler( Event_Log );
 }
 public static string EventSource
 {
  get
  {
   return eventSource;
  }
  set
  {
   eventSource = value;
   if ( ! EventLog.SourceExists( eventSource ) )
    EventLog.CreateEventSource( eventSource,
     "ApplicationEventLogger" );
   if ( logDest != null )
    logDest.Dispose( );
   logDest = new EventLog( );
   logDest.Source = eventSource;
  }
 }
 private static void Event_Log( object sender,
  LoggerEventArgs msg )
 {
  if ( logDest != null )
   logDest.WriteEntry( msg.Message,
    EventLogEntryType.Information,
    msg.Priority );
 }
}

事件会在发生一些事情时,通知任意多个对消息感兴趣的客户。Logger类不必预先知道任何对消息感兴趣的对象。

Logger类只包含一个事件。大多数windows控件有很多事件,在这种情况下,为每一个事件添加一个字段并不是一个可以接受的方法。在某些情况下,一个程序中只实际上只定义了少量的事件。当你遇到这种情况时,你可以修改设计,只有在运行时须要事件时在创建它。

(译注:作者的一个明显相思就是,当他想说什么好时,就决不会,或者很少说这个事情的负面影响。其实事件对性能的影响是很大的,应该尽量少用。事件给我们带来的好处是很多的,但不要海滥用事件。作者在这里没有明说事件的负面影响。)

上一页  1 2 3 4  下一页

Tags:Effective 原则 事件

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