委托和事件

2023-05-16

一、委托与事件的区别

委托是一种用于存储方法引用的引用类型,它定义了一种类型安全的调用回调方法的方式。
事件使用委托来封装触发时将要调用的方法,事件是一种函数成员。

委托是指向一个方法的指针,而且我们采取和调用方法一样的方式来调用它。调用一个委托时,”运行时“实际执行的是委托所引用的方法。可以动态的更改一个委托所引用的方法,事调用一个委托的代码每次都运行一个不同的方法。委托的优势是能引用多个方法。

二、建立委托和事件

1.C#使用关键字delegate来声明委托,声明的形式如下:
【特性】【修饰符】delegate【返回类型】【委托名】(【形式化参数列表】);
【特性】【修饰符】可选,delegate【返回类型】【委托名】必选。

  • 委托的修饰符包括new和访问修饰符(public 、protected、nternal和private)。new修饰符用来隐藏从基类继承而来的同名委托。public 、protected、nternal和private修饰符控制委托类型的可访问性。
  • 委托名一般采用第一个字母大写的名词,多名词组合每个名词的首字母大写。
  • 可选的【形式化参数列表】用来指定委托的参数,而【返回类型】则指定委托的返回类型,一个与委托兼容的方法必须满足一下两个条件:具有相同的参数数目、顺序相同、参数修饰符相同和返回类型相同(即与委托签名一致)。
  • 大多数委托要被重用,一般定义在于类平级,且用public修饰,如果定义在类的内部,则必须通过调用该类的成员才能取得委托的引用,频繁调用的情况下不合适
 public delegate void PassResultHandler(object sender, string result, int paud_rate);
 private void PassResult(object sender, string e, int paud_rate)
 {
 }
 //例如这样,方法和委托兼容

2.声明事件

event delegatetypename eventname           //delegatetypename委托类型名称      eventname事件名称

WPF实现关闭子窗口B时触发A窗口事件
在这里插入图片描述

1、定义子窗口B

发布器功能:

  //第一步,定义委托,委拖不属于任何一个类
  public delegate void ChangeTextHandler();
  public partial class B : Window   //事件发布类
{
    //第二步,声明事件
    public event ChangeTextHandler ChangeTextEvent;
    public B()
     {
        InitializeComponent();
     }
      //点击子窗口B上的一个按钮触发事件
     private void btnCalibraEnter_Click(object sender, RoutedEventArgs e)
      {
          this.Close();//关闭窗口B
          //第四步,调用事件
          ChangeTextEvent();
      }
}

2、定义窗口A,通过窗口A打开子窗口B,打开子窗口B后立即关闭窗口A
订阅器的功能:

public partial class A : Window
{
    public A()
    {
            InitializeComponent();
    }     
    //点击窗口A上的按钮,关闭窗口A,并注册事件
     private void btnNext_Click(object sender, RoutedEventArgs e)
        {
            this.Close();//关闭当前窗口
            //例化窗口B
            B demaWin = new B();
            demaWin.ChangeTextEvent += new B.ChangeTextHandler(method);//第三步,注册事件
            demaWin.Show();//打开窗口B 
        }
 
        //第五步,事件发生时要调用的方法
        private void method() 
        {
           //虽然当前窗口A已经关闭,但是事件触发时,程序依然可以执行到这里
        }   
}


原文参考:https://blog.csdn.net/kenjianqi1647/article/details/84134731

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

委托和事件 的相关文章

随机推荐

  • 利用POI实现json数据的Excel导出

    首先需要POI jar包 xff0c 相关jar包已经分享到个人网盘 xff0c 有需要可以进行下载 链接 xff1a https pan baidu com s 1N9Cc8UgHuHIMZbWfurmm3w 提取码 xff1a cc6p
  • 基于springboot的简单restful服务demo

    这篇文章主要是本人学习springboot时一个简单的测试demo xff0c 仅供参考 springboot的介绍 xff1a 由Pivotal团队提供的全新框架 xff0c 设计的目的是简化spring新应用搭建的过程 xff0c 使用
  • leetcode刷题 Day23(LRU缓存机制)

    题目 xff1a 思路 xff1a java用LinkHashMap解决 xff0c 在LRUCache中获取缓存容量 xff0c 在put方法中 xff0c 难点在于怎么进行判断最新数据和最不常用的数据 xff0c 这里采取这种办法 xf
  • 野火&洋桃STM32开发版学习指导完整版

    该文章是我历时一个月整理总结而成 xff0c 专门针对想要通过野火 amp 洋桃STM32开发板入门stm32的读者 由于csdn编辑限制 xff0c 该学习指导只包含文字信息 如需查看含图片的完整版可进入我的博客下载页 完整版内容详实 x
  • sumo学习——sumo的路网介绍

    2 sumo路网 这里的记录的内容 xff0c 并不以如何绘制或者如何建立一个路网体系为主 xff0c 而是较为详细的介绍 xff0c 在sumo中是如何定义路网格式的 这里所有的内容都是来自于sumo的软件说明翻译 xff0c 其中部分夹
  • webpack之devtool

    关于Devtool 该选项控制是否以及如何生成源映射 官网上给出的可选值有 xff1a 其中一些值适合开发 xff0c 一些用于生产 对于开发 xff0c 您通常需要快速的Source Maps xff0c 以bundle的大小为代价 xf
  • 汽车UDS诊断详解及Vector相关工具链使用说明——总述

    1 什么是诊断 车辆在运行过程中 xff0c 不可避免地会发生一些故障 xff0c 为了确保行车安全 xff0c 我们要求车上的ECU能够实时监测部件的运行状态 xff0c 一旦发现异常情况 xff0c 能通过点亮报警灯等方式提示驾驶员 但
  • 汽车UDS诊断详解及Vector相关工具链使用说明——2.2.7 动态定义DID(0x2C)

    1 概述 动态定义DID服务允许诊断仪在ECU内部动态定义一个临时的DID 可以通过该DID读取一段内存的数据 也可以通过改DID一次性读取多个原有DID的数据 动态定义DID既可以是支持22服务的DID 也可以是支持2A服务的周期性读取
  • 关于RTOS中信号量、互斥量、邮箱、消息队列的一些理解

    1 信号量 信号量有两种 xff1a 计数性信号量和二值信号量 xff0c 计数性信号量可以被获取多次 xff0c 二值信号量只有0和1两种状态 xff0c 只能被获取一次 信号量可以用来对资源进行保护 xff0c 防止多个任务同时访问某个
  • 英飞凌 AURIX 系列单片机的HSM详解(1)——何为HSM

    本系列的其它几篇文章 xff1a 英飞凌 AURIX 系列单片机的HSM详解 xff08 2 xff09 与HSM相关的UCB和寄存器 英飞凌 AURIX 系列单片机的HSM详解 xff08 3 xff09 开发方法 英飞凌 AURIX 系
  • DoIP(一)——基础概念

    1 DoIP概述 DoIP xff08 Diagnostic communication over Internet Protocol xff09 是基于车载以太网的诊断 xff0c 在OSI 七层模型中属于传输层 xff0c 其传输的诊断
  • DoIP(二)——报文类型

    我们上一篇文章提到 xff0c DoIP报头中有两字节的数据类型 xff08 Payload Type xff09 xff0c 代表DoIP报文类型 xff0c 本文就来详细介绍一下每一种报文类型 标准中对报文类型的定义如下 xff1a 数
  • AUTOSAR —— CAN网络管理(CanNm)

    1 网络状态 AUTOSAR网络管理节点内部有两个状态 xff0c 一个是Requested 被请求状态 xff0c 另一个是Released 被释放状态 xff0c 当节点的应用层需要使用总线进行通讯的时候 xff0c 会调用接口使得节点
  • S32K1XX系列单片机 ——(1)开发环境搭建

    本文介绍一下NXP S32系列单片机开发环境的搭建方法 xff0c 分两种 xff1a S32DS和Keil 1 S32DS S32DS是NXP开发的一款IDE xff0c 编译器是GCC xff0c 支持Lauterbach P amp
  • AUTOSAR —— S32K144 的 Fls 和 Fee 模块配置

    本文来简要介绍一下如何在EB中配置AUTOSAR Fls和Fee模块 Fls模块是Flash的驱动 xff0c 执行具体的Flash擦写读取等操作 Fee模块的全称是FlashEEPROMEmulation xff0c 即Flash模拟EE
  • NXP MCU CAN波特率(位时间)配置详解

    1 概述 本文将会详细讲解如何设置NXP MCU的CAN波特率 位时间 采样点等属性 波特率即CAN总线传输频率 xff0c 位时间是波特率的倒数 xff0c 例如波特率是500K xff0c 那么位时间 61 1 500000 61 0
  • 51单片机之蜂鸣器

    include 34 reg52 h 34 include 34 intrins h 34 typedef unsigned int ui typedef unsigned char uc define led P2 34 34 sbit
  • vnc配置

    centos版本在7 0以上的 一 安装 yum grouplist 查看是否已经安装过 yum groupinstall GNOME Desktop 如没有安装则运行命令安装 以root用户运行以下命令来安装vncserver yum i
  • 【WebAPI 验证】给 webapi加上token 验证(包括上传文件方法)

    需要给网站开发对接EMI 接口 xff0c 因此想通过Webapi 进行传递参数 xff0c 但是由于该方法不太安全 xff0c 因此不选用 xff0c 但是记录下该方法的使用 1 xff0c 创建WEBAPI 项目 xff0c 打开nug
  • 委托和事件

    一 委托与事件的区别 委托是一种用于存储方法引用的引用类型 xff0c 它定义了一种类型安全的调用回调方法的方式 事件使用委托来封装触发时将要调用的方法 xff0c 事件是一种函数成员 委托是指向一个方法的指针 xff0c 而且我们采取和调