c#中的事件 event

事件 就是一系列的动作。比如,柚子表白事件,就有好几个动作:1.摆柚子 2.暖场舞蹈 3.拿话筒表白。

事件是由一系列动作组成,对理解事件的使用很关键。

那么动作是什么呢?动作就是函数,因为函数就是做什么,一个函数就是一个动作,反之亦然。因此,事件 由一系列函数组成的

那么,函数有大有小,把一系列的函数实体加入到事件中,是不明智的。我们就将函数的代表加入到事件中。什么是函数的代表呢?在C#中,有一个delegate (委托),它就是标记一个函数代表类的。

 

 1 namespace EventDemo  
 2 {  
 3   
 4 delegate void FunctionName();//declare a funtion delegate class 
 5 class EventClass      {  
 6     public event FunctionName someevent;//declare an event;the event based on function delegate;  
 7     public void Run()//the method that makes the event run; 
 8     {  
 9         someevent();//because someevent is function name,so,this fashion makes function run;
10     }  
11 }    
12 //following is some functions that should be used directly in future;  
13 //hence,i wrap them in a class;
14 class F       {  
15     public static void Arrange()  
16     {  
17         Console.WriteLine("the boy arranges the grapefuits");  
18     }  
19     public static void Dance()  
20     {  
21         Console.WriteLine("friends of the boy dance");  
22     }  
23     public static void Express()  
24     {  
25         Console.WriteLine("the boy sings \"if you\" " );  
26     }  
27 }  
28   
29 class Program    {  
30     public static void Main(string[] args)  
31     {    
32         EventClass myEvent = new EventClass();  
33         //add function name,namely,the function delegates, to the event;  
34        //someevent is the list of functions;and functions are represented by function delegates;</strong>  
35         myEvent.someevent += F.Dance;  
36         myEvent.someevent += F.Arrange;  
37         myEvent.someevent += F.Express;  
38         myEvent.Run(); //event occurs;  
39         Console.ReadKey(true);  
40     }   
41  }  
42 }

event既然是一系列函数的列表,也可以看作是方法。既然是方法,那么它就属于某个对象的。那么,它就应该定义在类里面。作为类的一个方法使用。函数列表的函数可以来自很多方面,只要是函数就可以了。

 

delegate与event的区别:

首先event其实也是一种delegate,为了区分,我们称一般的delegate为“纯delegate”。

纯delegate与event的关系类似于field与Property(实事上前者就是field,或者我们可以把event看成是一种特殊的Property)

在使用上,纯delegate几乎没有任何限制,而event则有严格的限制(只能用在 += 和 -= 的左边

event更面向对象一些。
当我们需要灵活时,直接使用纯delegate;反之,需要严格的控制时,使用event。
由于event不能使用赋值运算符,因此有时我们要求一个事件在任何时刻只能有一个响应方法时,我们使用纯delegate更为方便。

 

 

 

*****************************************************
*** No matter how far you go, looking back is also necessary. ***
*****************************************************
posted @ 2018-06-22 11:39  Gangle  阅读(466)  评论(0编辑  收藏  举报