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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 2405|回复: 5
打印 上一主题 下一主题

[分享] C#事件总结与应用

[复制链接]

182

主题

2120

帖子

4842

积分

论坛元老

Rank: 8Rank: 8

积分
4842
跳转到指定楼层
楼主
发表于 2020-4-30 19:38:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
什么是事件?



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



通俗的说就是:

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



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

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

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

事件触发和注册

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

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

事件的声明

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

事件的声明的关键字: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();
        }
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

182

主题

2120

帖子

4842

积分

论坛元老

Rank: 8Rank: 8

积分
4842
沙发
 楼主| 发表于 2020-4-30 19:39:33 | 只看该作者
回复

使用道具 举报

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
板凳
发表于 2020-5-1 14:26:02 | 只看该作者
回复

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
地板
发表于 2020-5-5 14:03:13 | 只看该作者
回复 支持 反对

使用道具 举报

182

主题

2120

帖子

4842

积分

论坛元老

Rank: 8Rank: 8

积分
4842
5#
 楼主| 发表于 2020-5-6 18:11:10 | 只看该作者

啦啦啦啦啦啦 我是卖报的.....
回复 支持 反对

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
6#
发表于 2020-5-7 13:01:00 | 只看该作者
Adam丶鱼 发表于 2017-6-6 18:11
啦啦啦啦啦啦 我是卖报的.....

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-28 14:55 , Processed in 0.122258 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表