博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于C#事件总结与应用
阅读量:5847 次
发布时间:2019-06-19

本文共 1403 字,大约阅读时间需要 4 分钟。

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();

     

 

 

 

        }

    }

}

 

 

 

转载于:https://www.cnblogs.com/qufeiba/p/6901539.html

你可能感兴趣的文章
linux的LVM
查看>>
hive报错(2)udf无法找到第三方的类
查看>>
HashCode
查看>>
盘点5款Ubuntu监控工具解决CPU暴增问题
查看>>
java 测试IP
查看>>
C#实现ActiveX控件开发与部署
查看>>
用CSS做导航菜单的4个理由
查看>>
mysql优化综合(转)
查看>>
BZOJ5072:[Lydsy1710月赛]小A的树(树形DP)
查看>>
NOIP2015 运输计划 二分答案+Tarjan LCA+树上差分
查看>>
构建之法读后感
查看>>
hdu题型分类
查看>>
Python爬虫(一)
查看>>
霍夫变换的基本理解(第八天)
查看>>
个人博客作业三:英语学习APP的案例分析
查看>>
基本信息项目目标文档
查看>>
再谈PHP设计模式
查看>>
DNN Web Platform 官方汉化版本 5.5
查看>>
微软职位内部推荐-Senior Dev Lead
查看>>
如何在子线程中操作窗体上的控件
查看>>