深入理解 C# 中的事件机制

前言:
对于搞.net的朋友来说,经常会遇到关于事件和委托的问题:事件与委托有什么关系?事件的本质是什么?委托的本质又是什么?由于.net 做了大量的封装,对于初学者,这两个概念确实不怎么好理解。事件是用户与应用程序交互的基础,它是回调机制的一种应用。举个例子,当用户点击按钮时,我们希望弹出一句“您好”;这里的【点击】就是一个事件;那么回调就是我们注册一个方法,当用户点击时,程序自动执行这个方法去响应这个操作,而不是我们时刻去监听用户有没有点击。

c# 中间的事件和委托是紧密联系在一起使用的。网上的很多博客都是用的窗体来介绍事件。但是窗体中事件基本都是微软提前构建好的,很多同学不能理解事件里面的参数也不太明白怎么去自定义时间。所以针对这些不足和自己学习的知识对事件的理解整理成一片文章,希望能够帮助到正在学习的同学。

一;事件的组成结构
事件:能够发生的什么,是一种类型的成员(属性,方法),它的功能就是通知
使用:用于对象或类间的动作协调与信息传递(消息推送)
原理:事件模型 发生----->响应的5个动作,-----------(1)我有一个事件—>(2)一个人或者一群人关心我这个事件 —>(3)我的这个事件发生了
—>(4)关心这个事件的人会被依次通知到—>(5)被通知到的人根据拿到的事件信息(又称“事件数据”,“事件参数”,“通知”)对事件进行响应(又称为"处理事件")

事件模型的五个组成部分:
1.事件的拥有着(event source,对象或类)
2.事件成员(event,成员),事件自己是不会主动的去通知别的对象,一定是被拥有着的某些内部逻辑触发以后他才会去通知别的对象。
3.事件的响应者(event subscriber,对象),订阅了事件的对象或者类,通俗的讲就是接收事件的类(这个类它需要接受到事件拥有着发出的事件中的参数来工作)
4.事件处理程序(eventHandler,成员) – 本质上是一个回调方法,他是属于事件的响应者的内部方法
5.事件订阅 — 把事件处理器(一个函数)与事件关联在一起,本质上是一种以委托类型为基础的约定(所以又称为事件是基于委托的)对象.事件 += new 委托(事件处理器)

以我们开篇的点击事件为例,对上面的五种组成部分做一下详细介绍
事件拥有着:按钮控件
事件:点击(点击这个动作就是一个事件,它不会自己触发,必须是我们用鼠标点击)
事件的响应者:拥有注册这个方法的类
事件处理程序:完成注册的程序(当事件发出后,被事件响应者所捕捉,捕捉到以后调用事件处理器)
订阅: 对象.事件 += new 委托(事件处理器)
按钮.clicked += new 委托(事件处理函数)

案例一:使用简单的定时器控件触发事件

using System;
using System.Security.Cryptography;
using System.Threading.Tasks;
using System.Timers;

namespace ConsoleApp210_22
{
   
    // 定义委托 函数的类型 它的主要作用是 指定了事件处理方法必须拥有的返回类型和参数
    public delegate void MessageHandler(string messageText,int num);

    public class Connection
    {
   
        // 定义事件 指定要使用的委托类型。
        // 这种方式声明了事件后,就可以引发它(使用和委托触发的方法)。理解:他是一个其返回类型和参数是由委托指定的方法一样。通过方法的调用来引用事件
        public event MessageHandler MessageArrived;
        private Timer pollTimer;

        public Connection()
        {
   
            pollTimer = new Timer(1000);
            pollTimer.Elapsed += new ElapsedEventHandler(checkForMessage);
        }

        public void Connect
  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值