C#事件的理解

一、原理

1、定义:当某一对象达到某种条件或发生某种改变时,将消息及时的通知到其他对象。

2、事件是一种引用类型,实际上也是一种特殊的委托。

3、设定一个场景:周末我在床上躺着,当我肚子“咕咕”的叫了的时候,我知道我饿了,然后我就会起床、做饭、吃饭。这里“我饿了”就是一个事件,而“肚子咕咕叫”则触发了这个事件的发生(相当于一个“开关”),而我起床、做饭、吃饭就是这个事件被触发后要进行的一系列动作。

二、语法规则

1、事件的语法为:【访问修饰符    event     委托名    事件名】

2、由事件的语法可知,因为在定义事件的时候需要用到委托名,所以在定义事件之前需要先定义委托。

3、一般事件的执行顺序就是:事件触发方法—(调用)—事件方法—(调用)—委托方法—(调用)—底层方法

注:这个底层方法是自己起的一个便于理解的名称,就是事件被触发后要进行的一系列动作。

三、代码示例

 

    class Program
    {
        public delegate void Dele();  //定义一个委托类型
        public event Dele setevent;  //定义一个变量
//----------------------------------------------------------------------
        public static void pullalarm()   //定义三个底层方法
        {         Console.WriteLine("拉起警报");       }
        public static void ReinforceTheWall()
        {           Console.WriteLine("加固城墙");       }
        public static void Updatesolider()
        {            Console.WriteLine("升级士兵");        }
//----------------------------------------------------------------------------
        public void pushevent() {   //定义一个事件触发方法
            setevent();    //定义一个事件方法,这个方法名需要与事件名一致
        }
//-----------------------------------------------------------------------------
        static void Main(string[] args)
        {
            Program p = new Program();   //定义一个对象
 //-----------------------------------------------------------------------------         
            Dele del = pullalarm;      //多播委托,将底层方法挂载到委托中
            del += ReinforceTheWall;
            del += Updatesolider;
            p.setevent = del;  //将委挂载到事件方法中         
            p.pushevent();  //调用事件触发方法
//----------------------------------------------------------------------------------
             //下面是挂载的另一种写法
         //p.setevent = new Dele(pullalarm);//将底层方法挂载到委托中并将委托挂载到事件中,这里的【new Dele(方法名)】相当于【del】,因为底层方法是静态方法
         //p.setevent += new Dele(ReinforceTheWall); 类似于多播委托                                                                  //所以不需要对象调用
         //p.pushevent(); 
//---------------------------------------------------------------------------                                                       
            Console.ReadKey();

        }
    }

 

1、代码编写顺序:

   (1)定义委托(Dele)、事件(setevent)、定义底层方法(pullalarm、ReinforceTheWall、Updatesolider);

   (2)定义事件触发方法(pushevent),在事件触发方法中定义事件方法( setevent())(事件方法需要与定义的事件名称相同);

   (3)定义委托变量并将底层方法挂载到委托中( Dele del = pullalarm;),对于多个底层方法可以使用多播委托;

   (4)调用事件并将委托挂载到事件中;

   (5)调用事件触发方法;

 

C#事件的理解

上一篇:微软发布Windows Terminal Preview v0.10


下一篇:[WPF]总结一些我在开发WPF时常用的工具