using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication13 ... { /**//// <summary> /// 事件演示程序 /// </summary> class Program ...{ static void Main(string[] args) ...{ MyEvent myEvent = new MyEvent(); //注册事件(或者说订阅事件) myEvent.wakeUp += new EventHandler(ShowMessage); //在外部触发事件 myEvent.OnEvent(); } /**//// <summary> /// 事件处理程序(演示) /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public static void ShowMessage(object sender,EventArgs e) ...{ Console.WriteLine("hello,it's time to wakeup!"); } } /**//// <summary> /// 定义事件的类 /// </summary> /// <remarks> /// 在代理的基础上,事件实现了了另一个重要的机制:内部调用外部 /// 不能不佩服微软构思的巧妙,将代理稍一封装,就做成了功能强大的事件机制. /// 事件最本质上的作用就是: 通知功能.能自动在某个事件触发时通知别的类或程序, /// 执行一些代码. /// </remarks> public class MyEvent ...{ /**//// <summary> /// 声明事件 /// </summary> public event EventHandler wakeUp; /**//// <summary> /// 触发事件的函数,供外部调用,来触发该对象的事件 /// </summary> public void OnEvent() ...{ RaiseMyEvent(); } private void RaiseMyEvent() ...{ if ( wakeUp != null ) ...{ //复制一份,避免多线程访问时产生NullReferenceException.在此仅供演示. EventHandler bkWakeUP = wakeUp; //调用外部的事件处理程序 bkWakeUP(this, new EventArgs()); } } }}