事件是C#中另外一高级概念,使用方法和委托相关。奥运会参加百米的田径运动员听到枪声,比赛当即进行。其中枪声是事件,而运动员比赛就是这个事件发生后的动做。不参加该项比赛的人对枪声没有反应。html
从程序员的角度分析,当裁判员枪声响起,发生了一个事件,裁判员通知该事件发生,参加比赛的运动员仔细听枪声是否发生。运动员是该事件的订阅者,没有参赛的人不会注意,即没有订阅该事件。程序员
C#中使用事件须要的步骤:
一、建立一个委托;
二、将建立的委托与特定事件关联(.Net类库中的不少事件都是已经定制好的,因此他们也就有相应的一个委托,在编写关联C#事件处理程序--也就是当有事件发生时咱们要执行的方法的时候咱们须要和这个委托有相同的签名);
三、编写C#事件处理程序;
四、利用编写的C#事件处理程序生成一个委托实例;
五、把这个委托实例添加到产生事件对象的事件列表中去,这个过程又叫订阅事件。
1、定义事件编程
定义事件时,发生者首先要定义委托,而后根据委托定义事件。定义事件的语法以下:post
<访问修饰符> event 委托名 事件名;ui
定义事件时,必定要有一个委托类型,用这个委托类型来定义处理事件的方法类型。下面定义一个发布者类,并在其内部定义eventRun事件。url
1 class Judgment 2 { 3 //定义一个委托 4 public delegate void delegateRun(); 5 //定义一个事件 6 public event delegateRun eventRun; 7 }
2、订阅事件spa
定义好事件后,与事件有关的人会订阅事件,只有订阅事件的对象才会收到发生事件的通知,没有订阅该事件的对象则不会收到通知。订阅事件的语法以下:code
事件名+=new 委托名(方法名);htm
假如方法名为Run,那么订阅事件eventRun的代码以下:对象
judgment.eventRun+=new Judgment.delegateRun(runsport.Run);
judgment为类Judgment的对象,runsport为运动员类RunSports的对象,Run为其中的方法。
事件的订阅经过“+=”操做符来实现,能够给事件加一个或多个方法委托。
3、引起事件
通常都是在知足某个条件下引起事件,裁判员枪声一响,引起运动员奔跑这个事件。在编程中能够用条件诘句,也可使用方法引起事件。
1
2
3
4
|
public
void
Begin()
{
enentRun();
}
|
这段代码中,经过Begin方法引起事件enentRun。引起事件的语法与调用方法的语法相同,引起该事件时,将调用订阅事件的对象的全部委托。下面代码演示裁判员枪声响起到引起运动员比赛的动做,完整代码:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Example_EventTest 7 { 8 class Judgment 9 { 10 //定义一个委托 11 public delegate void delegateRun(); 12 //定义一个事件 13 public event delegateRun eventRun; 14 //引起事件的方法 15 public void Begin() 16 { 17 eventRun();//被引起的事件 18 } 19 } 20 class RunSports 21 { 22 //定义事件处理方法 23 public void Run() 24 { 25 Console.WriteLine("运动员开始比赛"); 26 } 27 } 28 class Program 29 { 30 static void Main(string[] args) 31 { 32 RunSports runsport = new RunSports();//实例化事件发布者 33 Judgment judgment = new Judgment();//实例化事件订阅者 34 //订阅事件 35 judgment.eventRun+=new Judgment.delegateRun(runsport.Run); 36 //引起事件 37 judgment.Begin(); 38 Console.ReadKey(); 39 } 40 } 41 }
Judgment类为事件发布者,RunSports类为事件订阅者。引起事件的方法为Begin();。一个事件能够有多个订阅者,事件的发布者也能够是事件的订阅者。