事件是C#中另一高级概念,使用方法和委托相关。
如:奥运会参加百米的田径运动员听到枪声,比赛立即进行。其中枪声是事件,而运动员比赛就是这个事件发生后的动作。不参加该项比赛的人对枪声没有反应。
从程序员的角度分析,当裁判员枪声响起,发生了一个事件,裁判员通知该事件发生,参加比赛的运动员仔细听枪声是否发生。运动员是该事件的订阅者,没有参赛的人不会注意,即没有订阅该事件。C#中使用事件需要的步骤:
1、创建一个委托;
2、将创建的委托与特定事件关联(.Net类库中的很多事件都是已经定制好的,所以他们也就有相应的一个委托,在编写关联C#事件处理程序--也就是当有事件发生时我们要执行的方法的时候我们需要和这个委托有相同的签名);
3、编写C#事件处理程序;
4、利用编写的C#事件处理程序生成一个委托实例;
5、把这个委托实例添加到产生事件对象的事件列表中去,这个过程又叫订阅事件。
一、定义事件
定义事件时,发生者首先要定义委托,然后根据委托定义事件。定义事件的语法如下:
<访问修饰符> event 委托名 事件名;
定义事件时,一定要有一个委托类型,用这个委托类型来定义处理事件的方法类型。下面定义一个发布者类,并在其内部定义eventRun事件。
1 class Judgment 2 { 3 //定义一个委托 4 public delegate void delegateRun(); 5 //定义一个事件 6 public event delegateRun eventRun; 7 }
1
2
3
4
|
public
void
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();。一个事件可以有多个订阅者,事件的发布者也可以是事件的订阅者。
from:https://www.cnblogs.com/gq0324/p/8177799.html