C#委托、事件、自定义事件的理解

c# 委托+匿名方法+Event(事件) 一、委托的定义 1、首先声明委托(定义一个方法的原型:返回值+参数类型+参数个数) 注解:声明委托的关键字是delegate public delegate int CalculatorDelegate(int a,int b) 2、根据委托定义一个具体的方法 定义返回值,参数类型,参数个数必须跟声明委托的返回值 参数类型和参数个数一致 int add(int a,int b){ return a+b; } 3.创建委托对象,关联委托方法 CalculatorDelegate objCa 阅读详情
C#委托、事件、自定义事件的理解
Girmo 发表于 2006-5-13 11:22:00
 
 
一、委托
委托类似于函数指针,但函数指针只能引用静态方法,而委托既能引用静态方法,也能引用实例方法。

委托使用分三步:1、委托声明。2、委托实例化。3、委托调用。
例程一:
using System;

namespace 委托
{
  delegate int NumOpe(int a,int b); //委托声明
  class Class1
  {
    static void Main(string[] args)
    {
      Class1 c1 = new Class1();
      NumOpe p1 = new NumOpe(c1.Add); //委托实例化
      Console.WriteLine(p1(1,2)); //委托调用
      Console.ReadLine();
    }

    private int Add(int num1,int num2)
    {
      return(num1+num2);
    }
  }
}
例中,委托NumOpe引用了方法Add。
委托声明了以后,就可以象类一样进行实例化,实例化时把要引用的方法(如:Add)做为参数,这样委托和方法就关联了起来,就可以用委托来引用方法了。
委托和所引用的方法必须保持一致:
1、参数个数、类型、顺序必须完全一致。
2、返回值必须一致。

二、事件

事件有很多,比如说鼠标的事件:MouserMove,MouserDown等,键盘的事件:KeyUp,KeyDown,KeyPress。

有事件,就会有对事件进行处理的方法,而事件和处理方法之间是怎么联系起来的呢?委托就是他们中间的桥梁,事件发生时,委托会知道,然后将事件传递给处理方法,处理方法进行相应处理。

比如在WinForm中最常见的是按钮的Click事件,它是这样委托的:this.button1.Click += new System.EventHandler(this.button1_Click);按按钮后就会出发button1_Click方法进行处理。EventHandler就是系统类库里已经声明的一个委托。

三、自定义事件及其处理

EventHandler以及其它自定义的事件委托都是一类特殊的委托,他们有相同的形式:

delegate void 事件委托名(object sender,EventArgs e);

object用来传递事件的发生者,比如二中的Button控件就是一个事件发生者;EventArgs用来传递事件的细节。

例程二:
using System;

namespace 最简单的自定义事件
{
  /// <summary>
  /// 事件发送类
  /// </summary>
  class Class1
  {
    public delegate void UserRequest(object sender,EventArgs e); //定义委托
    public event UserRequest OnUserRequest; //定义一个委托类型的事件

    public void run()
    {
      while(true)
      {
        if(Console.ReadLine()=="a")
        {//事件监听
          OnUserRequest(this,new EventArgs()); //产生事件
        }
      }
    }
  }

  /// <summary>
  /// 事件接收类
  /// </summary>
  class Class2
  {
    static void Main(string[] args)
    {
      Class1 c1 = new Class1();
      c1.OnUserRequest += new Class1.UserRequest(c1_OnUserRequest); //委托实例化后绑定到事件
      c1.run();
    }

    private static void c1_OnUserRequest(object sender, EventArgs e)
    {//事件处理方法
      Console.WriteLine("/t你触发了事件!");
    }
  }
}
例程三:
using System;

namespace 带事件数据的事件
{
  /// <summary>
  /// 带事件数据的事件类,从EventArgs继承
  /// </summary>
  class OnUserRequestEventArgs:EventArgs
  {
    private string inputText;
    public string InputText
    {
      get
      {
        return inputText;
      }
      set
      {
        inputText = value;
      }
    }
  }

  /// <summary>
  /// 事件发送类
  /// </summary>
  class Class1
  {
    public delegate void UserRequest(object sender,OnUserRequestEventArgs e);
    public event UserRequest OnUserRequest;

    public void run()
    {
      while(true)
      {
        Console.WriteLine("请输入内容:");
        string a=Console.ReadLine();
        //if(a=="a")
        //{
        OnUserRequestEventArgs e1 = new OnUserRequestEventArgs();
        e1.InputText = a;
        OnUserRequest(this,e1);
        //}
      }
    }
  }

  /// <summary>
  /// 事件接收类
  /// </summary>
  class Class2
  {
    [STAThread]
    static void Main(string[] args)
    {
      Class1 c1 = new Class1();
      c1.OnUserRequest += new Class1.UserRequest(c1_OnUserRequest);
      c1.run();
    }

    private static void c1_OnUserRequest(object sender, OnUserRequestEventArgs e)
    {
      Console.WriteLine("/t你输入的是:"+e.InputText);
    }
  }
}
保姆级教程:用Wokwi玩转ESP32 MicroPython仿真(含库文件配置指南) 本教程详细介绍了如何使用Wokwi平台进行ESP32 MicroPython仿真开发,包括库文件配置、传感器数据模拟和REPL调试技巧。通过Wokwi的仿真调试系统,开发者可以在浏览器中快速验证代码逻辑,提高开发效率,特别适合物联网项目的快速迭代。 阅读详情

相关推荐

LightGBM处理类别特征和缺失值有多省心?一个真实业务数据案例带你上手

本文通过真实电商数据案例,详细解析了LightGBM如何高效处理类别特征和缺失值。相比传统方法,LightGBM仅需一行代码即可自动处理高基数类别特征和缺失值,大幅提升模型训练效率和预测准确度,特别适合业务场景中的脏数据处理。

weixin_30689307的博客 460

还弄不明白【委托和事件】么?看这一篇就足够了!!!

这两个概念长时间不用了,今天看到CAD二次开发中用到了自定义事件,有点迷糊了,索性再整理一下加深印象! 一说到委托和事件,他们总是绑定在一起的不可分割!可能你会说啊!这有什么用啊?尽管你没有在意,但是只要你编写C#程序,就会潜移默化的使用委托和事件,这也是多态的一种表现形式。有关多态,我们后续再说。本节力求通俗易懂的让你明白委托和事件的关系,并能自己去编写,即使不去编写也能看懂C#中的代码。 目录 1.委托: 1.1使用委托的步骤: 1.2程序应用: ①声明委托 ②根据委托定义方法 ③定义委

韦_恩的博客 6506

死区补偿---学习笔记

最近调试中发现,死区补偿对电流谐波和电流带宽影响挺大,于是对死区补偿产生浓厚兴趣,找来几篇文章粗读并做一下笔记。 传统做法 无非就是根据电流方向补偿,假如svpwm计算出的A相理论导通实践为T1,死区时间是Td,则实际导通时间T = T1-Td(when ia >0 ),于是在svpwm计算出的导通时间T1的基础上加上Td。这样经过PWM模块后,实际的导通时间即为T1. 但存在两个难点(个人总结): 1,受电流检测精度影响,尤其是在过零点检测困难。 2,真实的二极管导通需要一定电压,并非..

圆桌骑士的博客 2万+

C#委托,事件详解

五、事件处理程序声明:这些在订阅者类的方法中的描述会在事件触发时被执行,它们不需要有独立的办法,可以是匿名方法或lambda表达式。invoke(调用)或fire(触发)事件的术语,当事件被触发时,所有注册到它的方法都会被调用。二、委托类型声明:事件和事件处理程序必须有共同的签名和返回类型,它们通过委托类型声明进行描述。事件好像被简化的针对特殊用途的委托,事件是成员,没有对象,被隐式初始化为null。四、触发事件的代码: 发布者类中的这段代码调用事件导致它调用事件处理程序。

weixin_60131151的博客 3993

医学图像分割实战:基于TransUNet训练自己的眼底硬渗出物数据集(附完整代码)

本文详细介绍了基于TransUNet的眼底硬渗出物分割实战指南,涵盖数据预处理、模型调优、训练策略及性能优化等关键环节。通过代码复现和实验对比,展示了TransUNet在医学图像分割中的优势,为糖尿病视网膜病变的早期诊断提供技术支持。

weixin_42524708的博客 364

射频工程师笔记---射频通信基础

回顾一下移动通信技术的发展,其实是互联网和通信技术的融合过程。在这个过程中,很多应用都在不断加入其中。比如计算机跟通信的融合产生了互联网、互联网跟手机的融合带来了移动互联网。手机可以看杂志、看视频、听音乐,于是又出现了内容服务产业;再后来,电视音箱等设备也能联网,于是网络跟家电又产生了融合。所以应用的出现总是在融合其他产业。在1995年,比尔·盖茨在《未来之路》一书中首次提出:在未来...

多年硬件从业经历,热爱学习,记录生活! 2万+

C#委托和事件的理解

一、委托的概念 委托从字面上理解就是一种代理,类似于房屋中介,由租房人委托中介为其租赁房屋。 在 C# 语言中,委托则委托某个方法来实现具体的功能。 委托的特点: 1、委托是一种引用类型,虽然在定义委托时与方法有些相似,但不能将其称为方法。 2、从数据结构来讲,委托和类一样是一种用户自定义类型。 3、委托是方法的抽象,它存储的就是一系列具有相同签名和返回类型的方法的地址。 4、调用委托的时候,委托包含的所有方法将被执行。 委托的分类: 方法委托 多播委托 匿名委托 委托的使用步骤:

qq_57767445的博客 473

机器人手眼标定快速精度验证方法

机器人手眼标定快速精度验证方法

laoli_的博客 1万+

C#区分委托与事件

本篇文章来学习一下委托与事件的区别,以及它们之间的关系。委托(Delegate)是一种数据类型,可以存储方法的引用,允许通过该引用调用方法,也允许通过 += 和 -= 操作符来添加或删除方法。委托是一种数据类型,委托代表的是方法,当调用委托时就是调用了这个方法。事件(Event)是一种特殊的委托,它基于委托,是委托的封装,确保外部代码不能直接更改事件的委托列表(即确保事件不能被直接赋值或修改),只能通过订阅 += 和取消订阅 -= 来操作事件。委托是事件的基础。委托可以直接调用,而事件不能直接触发

grapefruit_lyy的博客 4378

迅投miniQMT量化交易之【网格交易】的实现(25)——写在最后

和大家一起分享如何使用miniQMT实现我们自己的网格交易系统。如果您对量化交易感兴趣,欢迎一起交流。

tzzqn2008的专栏 829

Allegro Design Entry HDL(OrCAD Capture HDL)原理图是设计快速入门图文教程

Allegro Design Entry HDL是Cadence公司开发的原理图设计工具,也可与Allegro PCB设计工具无缝对接,虽然板级开发中不如Design Entry CIS(又名 OrCAD Capture CIS)的使用那么广泛,但是由于Design Entry HDL支持芯片的开发,所以有不少公司尤其是芯片背景公司,选择使用Design Entry HDL进行原理图设计。两个原理图开发工具的使用方法大同小异,本文简单介绍使用Allegro Design Entry HDL开始一个新的设计,

fydar的博客 4134

C#委托、事件、自定义事件,方法的理解

C#委托、事件、自定义事件,方法的理解Girmo 发表于 2006-5-13 11:22:000推荐一、委托委托类似于函数指针,但函数指针只能引用静态方法,而委托既能引用静态方法,也能引用实例方法。委托使用分三步:1、委托声明。2、委托实例化。3、委托调用。例程一: using System;namespace 委托{

1031

YOLO11涨点优化:创新多尺度卷积注意力(MSCA)模块,小目标检测神器!

MSCA模块通过创新的多尺度设计,在保持计算效率的同时显著提升小目标检测能力。实验证明,在YOLOv5/v8等模型上嵌入MSCA后,mAP提升超过2%,小目标检测精度提升近4%,且计算代价增加极小。注意力机制的未来发展方向动态核尺寸:根据输入特征自适应调整卷积核大小跨模态融合:结合RGB与深度/热力图等多模态信息自监督优化:利用对比学习预训练注意力模块尝试在你的YOLO模型中插入MSCA模块,欢迎在评论区分享你的涨点结果!参考文献。

QQ_778132974的博客 470

对C#委托、事件、自定义事件的理解

一、委托委托类似于函数指针,但函数指针只能引用静态方法,而委托既能引用静态方法,也能引用实例方法。委托使用分三步:1、委托声明。2、委托实例化。3、委托调用。例程一:程序代码 1usingSystem;23namespace委托4{5delegateintNumOpe(inta,intb);//委托声明6classClass17{8staticvoid...

alalei6000的博客 126

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C#自定义处理事件(作者还没完全理解事件和委托,所以有可能错漏百出)

1.C#的处理事件整个框架,其实就是观察者模式的一种应用        观察者模式:老师监视学生考试,学生若作弊,老师立即打人 2.涉及的元素:    所以必须涉及两个对象,事件引发者(触发)--学生;事件处理者--老师    同时涉及两个事件,触发事件--作弊;处理事件--打人   3.学生类      //其实Cheating就是一个委托,而委托就是一组函数的集合,函数类(汗!!...

weixin_34121304的博客 122

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C#委托总结

前些日子,简单的熟悉和了解了一下委托,因为自己之前也没接触过委托,所以就上网搜罗了一下,并简单的记录和实践了一下,并将此记录在了博客园里了。今天正好有空,就再来回顾一下,慢慢了看了一下还是感觉像是新知识,虽然脑子里隐隐约约的有了一些印象。 C#委托一 (委托基础) C#委托二 (委托类型) 通过委托基础简单的对委托进行了了解,然后定义了简单的委托,通过委托实现两个数值之间比较大小。 然后...

weixin_30412167的博客 88

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C#委托和事件

C#委托和事件的基本认识和使用

ET0783的博客 521

C#面向对象编程6——接口、委托、事件

接口 委托 委托链 事件 事件链

qq_42832272的博客 1696

刘铁猛C#课程 委托和事件详解

上面为自定义委托类型 public 关键字 返回值 委托名(委托方法的参数列表)委托是一种类要声明在名称空间体中,注意声明委托的位置虽然类也可以嵌套定义委托如何使用?一般将委托做为参数传递。

weixin_45067548的博客 1006

第一章、C#委托和事件(Delegate、Event、EventHandler、EventArgs)

14.1、委托 当要把方法作为实参传送给其他方法的形参时,形参需要使用委托。委托是一个类型,是一个函数指针类型,这个类型将该委托的实例化对象所能指向的函数的细节封装起来了,即规定了所能指向的函数的签名,也就是限制了所能指向的函数的参数和返回值。当实例化委托的时候,委托对象会指向某一个匹配的函数,实质就是将函数的地址赋值给了该委托的对象,然后就可以通过该委托对象来调用所指向的函数了。利用委托,程序...

2万+

zy77_C#中的自定义事件以及事件程序中的继承

zy77_C#中的自定义事件以及事件程序中的继承

weixin_47149785的博客 1090

C# 事件

C# 事件 事件,我相信开始学C#的朋友都会用过,在C#中很常见,比如点击一个按钮,上传一张图片等等,在WinForm或WebForm中都在使用着事件。今天,趁着有少少事件,我决定来重温一下之前被自己略过的东西 - 事件。   好记得在之前,在用一个方法的时候,如...

82

C#委托事件及自定义事件的处理

一、C#委托类 委托类似于函数指针,但函数指针只能引用静态方法,而委托既能引用静态方法,也能引用实例方法。 委托使用分三步:1、委托声明;2、委托实例化;3、委托调用。 例程一: 程序代码 using System; namespace 委托 { delegate int NumOpe(int a,int b); //第一步:委托声明 class

zhangj1012003_2007的专栏 664
上一篇: 抽象类与接口
下一篇: c#報表
jackeyabc
博客等级 码龄20年 71粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值