黑马程序员技术交流社区

标题: 委托和事件的小问题 [打印本页]

作者: 郑丹丹1990    时间: 2013-4-28 21:59
标题: 委托和事件的小问题
  1. namespace 事件发布和订阅_2
  2. {
  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.             TrafficLight light = new TrafficLight();
  8.             Car car1 = new Car();
  9.             car1.Enter(light);
  10.             light.ChangeColor(60);
  11.             Console.ReadKey();
  12.         }
  13.     }
  14.     public class LightEvrntArgs : EventArgs
  15.     {
  16.         private int seconds;
  17.         public int Seconds { get { return seconds; } }
  18.         public LightEvrntArgs(int seconds)
  19.         {
  20.             this.seconds = seconds;
  21.         }
  22.     }
  23.     public class TrafficLight
  24.     {
  25.         private bool color = false;
  26.         public bool Color { get { return color; } }
  27.         public event EventHandler OnColorChange;
  28.         public void ChangeColor(int seconds)
  29.         {
  30.             color = !color;
  31.             Console.WriteLine(color ? "红灯亮" : "绿灯亮");
  32.             if (OnColorChange != null)
  33.             {
  34.                 OnColorChange(this, new LightEvrntArgs(seconds));
  35.             }
  36.         }
  37.     }




  38.     public class Car
  39.     {
  40.         private bool bRun = true;
  41.         public void Enter(TrafficLight light)
  42.         {
  43.             light.OnColorChange += LightChange;
  44.         }
  45.         //相应的事件处理方法
  46.         public virtual void LightChange(object sender, EventArgs e)
  47.         {
  48.             if (((TrafficLight)sender).Color)
  49.             {
  50.                 bRun = false;
  51.                 Console.WriteLine("{0}停车{1}秒后启动", this, ((LightEvrntArgs)e).Seconds);
  52.             }
  53.             else
  54.             {
  55.                 bRun = true;
  56.                 Console.WriteLine("{0}启动{1}秒后通过", this, ((LightEvrntArgs)e).Seconds);
  57.             }
  58.         }
  59.     }
  60. }
复制代码
这个事件委托我似懂非懂,//相应的事件处理方法
        public virtual void LightChange(object sender, EventArgs e)
这句我只知道相当于WinForm程序中的Button_Click(object sender, EventArgs e)
主要是事件发布者方TrafficLight的事件委托该如何理解????

作者: 许庭洲    时间: 2013-4-29 06:18
1. 委托是类型;
2. 事件是对象;
3. 事件的内部是用委托实现的;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2