A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑丹丹1990 中级黑马   /  2013-4-28 21:59  /  926 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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的事件委托该如何理解????

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

1 个回复

倒序浏览
1. 委托是类型;
2. 事件是对象;
3. 事件的内部是用委托实现的;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马