委托与事件

2023-05-16

委托与事件

一、委托(delegate

1、委托是一种可以把引用存储为函数的类型。

2、在定义了委托后,就可以声明该委托类型的变量,接着把这个变量初始化为与委托有相同返回类型和参数类别的函数引用,之后,就可以使用委托变量调用这个函数,就像该变量是一个函数一样。

如:

double multiply(double param1, double param2)
{
	Return param1*param2;
}

double divide(double param1, double param2)
{
	Return param1/param2;
}

delegate double processDelegate(double param1,double param2);//定义委托类型processDelegate

processDelegate process;//声明委托类型的变量process

process = new processDelegate(multiply);//使用multiply初始化变量process
double m1 = process(1,2);//其实相当于调用multiply(1,2);

process = new processDelegate(divide);//使用divide初始化变量process
double m2 = process(1,2);//其实相当于调用divide (1,2);


3、可以把委托变量作为参数传递给一个函数,如

 

void executeFunction(processDelegate param)
{
	param (1,2);
}


二、事件

事件由对象引发,可以订阅事件。订阅一个事件的含义是提供代码,在事件发生时执行这些代码,即事件处理程序。单个事件可供多个处理程序订阅,在该事件发生时,这些处理程序都会被调用。事件处理程序可以在该事件的对象所在的类中,也可能在其他类中。事件处理程序其实就是一个方法,其唯一的限制是它必须匹配于事件所要求的返回类型和参数,这个限制是事件定义的一部分,由一个委托指定。具体可以参照如下的代码及注释:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;

namespace TestEvent
{
    public delegate void messageHandler(string messageText);//定义委托类型messageHandler

    public class connection
    {
        public event messageHandler messageArrived;//定义事件成员,并使用委托类型messageHandler指定事件处理方法必须拥有的返回类型和参数
        private Timer pollTimer;

        public connection()
        {
            pollTimer = new Timer(100);
            pollTimer.Elapsed += new ElapsedEventHandler(checkForMessage);//为pollTimer对象的Elapsed事件添加处理方法,即订阅事件
        }

        public void connect()
        {
            pollTimer.Start();
        }

        public void disConnect()
        {
            pollTimer.Stop();
        }

        private static Random random = new Random();

        private void checkForMessage(object source, ElapsedEventArgs e)
        {
            Console.WriteLine("checking for new messages.");
            if ((random.Next(9) == 0) && (messageArrived != null))
            {
                messageArrived("Hello Event!");//触发messageArrived事件
            }
        }
    }

    public class display
    {
        public void displayMessage1(string message)
        {
            Console.WriteLine("Message arrived displayMessage1:{0}", message);
        }

        public void displayMessage2(string message)
        {
            Console.WriteLine("Message arrived displayMessage2:{0}", message);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            connection myConnection = new connection();
            display myDisplay = new display();
           
            //为myConnection对象的messageArrived事件添加处理方法(对象myDisplay的displayMessage1方法)
            myConnection.messageArrived += new messageHandler(myDisplay.displayMessage1);

            //可以为messageArrived事件添加其它处理方法,如myDisplay的displayMessage2方法,
            //在第一个处理方法执行完成之后执行此处理方法
            myConnection.messageArrived += new messageHandler(myDisplay.displayMessage2);

            myConnection.connect();

            Console.ReadKey();
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

委托与事件 的相关文章

随机推荐

  • pytorch pretrained model

    pytorch pretrained model two methods method 1 比较大小 self span class token punctuation span model span class token operato
  • 嵌入式100题(76):中断和异常的区别

    中断和异常的区别 1 异常 是指CPU内部出现的中断 即在CPU执行特定指令时出现的非法情况 同时异常也称为同步中断 因此只有在一条指令执行后才会发出中断 不可能在指令执行期间发生异常 产生的原因 程序的错误产生的 编程异常通常叫做软中断
  • 字节序、大端序与小端序及其相关转换

    大端序与小端序及其相关转换 一 字节序定义 字节序 xff0c 为字节的顺序 xff0c 就是大于一个字节类型的数据在内存中的存放顺序 xff0c 一个字节的数据当然就没有顺序可言了 xff0c 其实大部分人在实际的开发中都很少会直接和字节
  • SkeyeLive开源流媒体PC端推拉流直播软件源码功能框架解析

    SkeyeLive是OpenSKEYE开源流媒体团队开发的一款功能丰富的开源PC端流媒体推流拉流直播软件项目 xff0c 目前支持Windows Android版本 xff0c 后续将支持ios版本 xff0c 其中Windows版本的Sk
  • 融资租赁业务系统(财务中台)

    融资租赁业务系统 财务中台 产品白皮书 版本号 xff1a V1 1 李雷 微信号 xff1a yanan122914 平台概述 融资租赁财务中台产品是一套专门针对融资租赁行业设计的融资租赁财务统一解决方案 对租赁公司传统的大单回租 直租
  • InfoQ推荐语:我的梦想

    大家好 非常高兴能在这一期的架构师和大家见面 本人工作了十余载 先后在洪恩软件和用友集团任职 目前任职于用友集团瑞友科技研究院 主要关注领域 企业应用软件平台研发 领域驱动设计 OSGi 动态语言应 用 云计算 移动互联和Mac OS平台相
  • 【MySQL】------数据库连接

    分享第十九条励志语录 要想飞起来 xff0c 首先要有飞翔的信念 xff0c 如果没有这个信念 xff0c 永远不可能飞起来 但只要有了飞翔的信念 xff0c 再加上自己的努力 xff0c 就有可能能够飞起来 成功也是这样 xff0c 要想
  • 无人机调试记录(一)

    无人机调试记录 xff08 一 xff09 固件 xff1a PX4 地面站 xff1a QGC APM xff08 pixhawk xff09 飞控疑难杂症解决方法汇总 校准 1 确保陀螺仪 水平线校准正确 如果校准完成后 xff0c Q
  • VsCode中使用git

    你是否厌倦了每天早上到公司都要打开git 小黑框 执行git clone 地址去拉取代码 而强大的VsCode只需要点一下即可解决 1 添加到暂存区 xff0c 更改文件以后可以发现 点进去上图这个标志 如果没有 xff0c 右击左侧菜单栏
  • 虚拟机上无法运行ubuntu自带的gazebo仿真器报VMware: vmw_ioctl_command error 无效的参数

    问题说明 xff1a 虚拟机版本 xff1a VMware Workstation 16 Pro Ubuntu版本 xff1a Ubuntu 18 04 现象 xff1a gazebo闪退 xff0c 并报 VMware vmw ioctl
  • NVIDIA JETSON TX2镜像制作以及刷机流程

    一 安装环境准备 xff1a Ubuntu宿主主机一台 xff0c TX2新老板子各一个 xff08 老的用来镜像备份 xff0c 用这个镜像给新的刷机 xff09 xff0c USB Micro USB线一根 1 下载TX2驱动 直接在百
  • 各种排序混合---冒泡排序、选择排序、插入排序

    冒泡排序 不多说 xff0c 看代码 xff0c 就是把最大的数字或者最小的数字沉到最右边 xff0c 最后输出数组 include lt iostream gt include lt stdlib h gt include lt math
  • 【PyQt5】串口数据实时绘图

    常见的串口调试助手一般只有简单的文本界面 xff0c 偶然看到 Arduino IDE 自带的串口绘图工具 xff0c 觉得用户设计挺友好 想着利用一下周末空闲时间 xff0c 用 PyQt5 实现一个串口数据实时绘图小工具 xff0c 在
  • HTTPS、HTTPS、SSH、MSTSC等常用网络服务的端口号

    前言 今天在 powershell下使用curl命令访问 一个网址 返回 443 port 相关的错误信息 xff0c 我第一眼看 xff0c 还以为是HTTP STATUS CODE 于是去查了一会儿才发现 xff0c 是端口号的问题 下
  • vue服务端渲染——基础

    文章目录 vue服务端渲染 xff08 基础 xff09 Nuxt框架文件目录结构项目启动 打包生命周期SSRnuxtserverInitmiddleware 中间件全局中间件页面级中间件 validate 校验参数asynData校验参数
  • 变压变频调速的原理(VVVF)——基础补充

    1 变压变频调速系统的基本原则 xff1a 维持气隙磁通不变 根据电磁感应原理 xff0c 气隙磁通在定子绕组每相绕组中的感应电动势为 xff1a Fs 为定子频率 xff0c Ns 为定子每相绕组串联匝数 xff0c Kns为基波绕组系数
  • RIA迷你书序言

    RIA Minibook Prologue RIA迷你书序言 Rich Internet Applications or RIAs have truly revolutionized user experiences online When
  • Tensorflow版本和python对应关系,以及tensorflow下载路径

    A few installation mechanisms require the URL of the TensorFlow Python package The value you specify depends on your Pyt
  • 串口的应用层操作

    一 设备中一般会用第二串口与外设通信 需要可以配置波特率 xff0c 实现应用层面的串口读写 二 代码实现 span class token macro property span class token directive hash sp
  • 委托与事件

    委托与事件 一 委托 xff08 delegate xff09 1 委托是一种可以把引用存储为函数的类型 2 在定义了委托后 xff0c 就可以声明该委托类型的变量 xff0c 接着把这个变量初始化为与委托有相同返回类型和参数类别的函数引用