前言:C#的事件也是一项非常关键的技术,必须要深刻的理解,本质上是基于委托的;
事件模型的五个组成部分:
1.事件的拥有者—— event source,对象;
2.事件的成员——event,成员;
3.事件的响应者——event subscriber,对象;
4.事件处理器——event handler,方法成员——本质上是一个回调方法;
5.事件订阅——把事件处理器和事件关联在一起,本质上是一种以委托类型为基础的“约定”;
下面来简单举个例子感受一下事件:
使用VS自带的Timer的Elapsed事件来关联2个自定义的对象;
1 using System; 2 using System.Timers; 3 4 namespace SimpleEventTest 5 { 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 Timer timer = new Timer();//实例化一个timer 11 Boy boy = new Boy();//实例化一个boy 12 Girl girl = new Girl();//实例化一个girl 13 timer.Elapsed += boy.Act;//关联事件 14 timer.Elapsed += girl.Act; 15 timer.Interval = 1000; 16 timer.Start();//运行timer,一旦满足条件自动触发被关联的方法; 17 Console.ReadLine(); 18 } 19 } 20 class Boy 21 { 22 private int count = 0; 23 internal void Act(object sender, ElapsedEventArgs e) 24 { 25 count++; 26 Console.WriteLine("Boy:Jump>>>"+count); 27 } 28 } 29 class Girl 30 { 31 private int count = 0; 32 internal void Act(object sender, ElapsedEventArgs e) 33 { 34 count++; 35 Console.WriteLine("Girl:Jump>>>" + count); 36 } 37 } 38 }
运行的效果:
值得注意的一些技巧:
1.用来相应事件的方法命名最好取名有意义:比如上面的Action();
2.当我们新建一个空的Boy类时,直接先写实例boy的boy.Action,会提示红色波浪线;
此时,
自动生成Act方法,且符合事件的签名;
~~~~~~~~~~~~~~~~~~~~~~~~
以上,初步感受。
未完待续》》》