度量快速开发平台-专业、快速的软件定制快开平台

标题: C#事件总结与应用 [打印本页]

作者: Adam丶鱼    时间: 2020-4-30 19:38
标题: C#事件总结与应用
什么是事件?



事件是特殊化的委托,委托是事件的基础,所以在介绍事件之前先介绍一下委托



通俗的说就是:

事件就是消息驱动器通过委托类来调用感兴趣的方法,事实上事件调用是间接的调用  就像是显示中我的代理人一样



发布者与订阅者
在学习事件的时候们首先要明白什么是发布者什么是订阅者:

通知某件事情发生的,就是发布者(例如我发布了微博)

对某件事情关注的,就是订阅者(例如我关注了微博)

事件触发和注册

事件发生时,会通知所有关注该事件的订阅者(例如我发布了新的微博)

想在事件发生时被通知,就必须注册表示关注(例如我关注微博有了新的动态)

事件的声明

事件的声明首先要先定义一个委托类 ,因为事件的触发就是调用一系列订阅者注册函数的过程 而委托本身就可以持有多个签名返回值相同的函数

事件的声明的关键字:event

笔者在这里写了一个关于学校上下课的事件



using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;



namespace 事件

{
    public delegate void EventHandler(int ringKind);//声明一个带参数的委托

    public class ShoolRing //定义一个发布者类

    {
        public event EventHandler OnBellSound;//委托发布

        public void Jow(int ringKind)//实现打铃操作

        {
            if (ringKind == 1 || ringKind == 2)//判断打铃是否合法

            {
                Console.Write(ringKind == 1 ? "上课铃响了," : "下课铃响了 ,");

                if (OnBellSound != null)//如果委托事件不等于空则回调委托所定义的方法

                {
                    OnBellSound(ringKind);
                }

            }

            else

            {
                Console.WriteLine(" 这个铃声参数不正确!");      
            }

        }
    }

    public class Studens

    {
        public void ShowJow(int ringKind)//学生方法

        {
            if (ringKind == 1)
            {
                Console.WriteLine("同学们去上课!");
            }
            else if (ringKind == 2)

            {
                Console.WriteLine("同学们课间休息了!");
            }

        }
}

}

class Program

    {
        static void Main(string[] args)

        {
            ShoolRing shool = new ShoolRing();//实例化发布者类
            Studens stu = new Studens();//实例化订阅者类

            shool.OnBellSound += stu.ShowJow;//订阅事件

            shool.Jow(Convert.ToInt32(Console.ReadLine()));

            Console.ReadLine();
        }
    }
}

作者: Adam丶鱼    时间: 2020-4-30 19:39

作者: fteair    时间: 2020-5-1 14:26

作者: 张兴康    时间: 2020-5-5 14:03

作者: Adam丶鱼    时间: 2020-5-6 18:11
张兴康 发表于 2017-6-5 14:03

啦啦啦啦啦啦 我是卖报的.....
作者: 张兴康    时间: 2020-5-7 13:01
Adam丶鱼 发表于 2017-6-6 18:11
啦啦啦啦啦啦 我是卖报的.....






欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://plat.delit.cn/) Powered by Discuz! X3.2