.net 委托和事件

OpenClaw人人养虾:发现与传输 客户端需要先"发现"Gateway 的地址和端口,才能建立连接。OpenClaw 支持多种发现(Discovery)和传输(Transport)机制。 阅读详情

委托和事件在.net中是至关重要的,学好委托和事件可以让我们写出更简洁的代码,为我们为后面的学习作为铺垫
委托:生活中的委托比如我们想要完成一件事情,而我们自己不想完成 想让别人代替我们完成 这就是委托。
在程序中的委托:  我们知道c#是面向对象的   把生活中的情境放到程序里面就是方法(生活中人的行为在程序中就是方法) 比如说一个下载程序要显示下载进度条,而进度条不想放在下载的方法里面显示(自己不愿意干)  就可以利用委托把显示进度条的任务交个显示页面的方法去完成(别人帮你完成)这就是程序中的委托。
事件:生活中的事件想必大家也很好理解比如 猫发出叫声(事件发起者)  老鼠(事件接收者)听见会逃跑这就是事件。
程序中的事件:在程序中事件的本质也是委托  时间是由委托发起的  也就是说事件本身不会发生  通过委托来进行事件发起。
事件创建语法:
访问修饰符+event(事件关键字)+委托类型+ 事件名
委托创建语法:
访问修饰符+delegate+返回值类型+委托名(参数列表);
注意:委托是一中类型  是自定义类型 他的类型就是方法名称
好了  基础知识说过了 我们下面直接看代码   
```using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication16
{
    /// <summary>
    /// 测试.net事件
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat("Tom", "白色");
            Mouse mou = new Mouse("Jerry", "黑色");
            //+=添加一个事件  -=取消一个事件
            cat.CatShoutEvent += new Cat.CatShoutEventHandler(mou.Run);
            cat.Shor();
            Console.ReadKey();
        }
    }
    /// <summary>
    /// 猫类
    /// </summary>
    class Cat {
        public string name;
        public string color;
        public Cat(string name,string color) {
            this.name = name;
            this.color = color;
        }
        /// <summary>
        /// 猫叫的方法(发出事件)
        /// </summary>
        public void Shor() {
            Console.WriteLine("一只名字为"+this.name+"颜色为"+this.color+"的小猫发出了叫声——喵喵喵");
            if (CatShoutEvent!=null)
            {
                CatShoutEvent(this, new CatShoutEventArgs() { catColor=this.name, catName=this.color });
            }
        }
    
        //定义一个委托(处理猫叫的事件处理)
        public delegate void CatShoutEventHandler(object sender, CatShoutEventArgs e);
        //定义一个事件(创建事件的语法:访问修饰符(public  event  委托方法名(或委托返回类型) 事件名))
        public event CatShoutEventHandler CatShoutEvent;
      
    }
    //事件需要传送的参数必须继承EventArgs类
    class CatShoutEventArgs : EventArgs {
        public string catColor { get; set; }
        public string catName { get; set; }
    }

    /// <summary>
    /// 鼠类
    /// </summary>
    class Mouse { 
       public string name;
        public string color;
        public Mouse(string name, string color)
        {
            this.name = name;
            this.color = color;
        }
        /// <summary>
        /// 老鼠逃跑的方法(事件接受者)
        /// </summary>
        public void Run(object sender,CatShoutEventArgs  e) {
           Cat  obj= sender as Cat;//事件发起者
            Console.WriteLine("事件发起者的名字:"+obj.name);
            Console.WriteLine("传过来的参数是:"+e.catName);
            Console.WriteLine(name + " 的老鼠 " + color + " 说:\"老猫来了,快跑!\"  \n我跑!!\n我使劲跑!!\n我加速使劲跑!!!\n");
        }
    }
}
运行结果图:
![这里写图片描述](https://img-blog.youkuaiyun.com/20171222115858087?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVGVzdERhdGFz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
```
代码中需要解释的就是事件参数  在代码中Mouse这个类中的Run方法接收两个参数第一个是object类型的 sender这个参数是指事件的发起者的信息,第二个参数是CatShoutEventArgs类型的  他是继承雨EventArgs类的 (如果事件不需要参数这个可以忽略不写)  这个类是事件参数的信息 比如想获取事件发起者的信息 就可以用以下代码
  Cat  obj= sender as Cat;
    Console.WriteLine("事件发起者的名字:"+obj.name);
基于YOLOv11的手术器械计数系统:从数据集构建到Web应用部署 m2cai16-tool数据集:包含15种腹腔镜手术器械的标注图像Cholec80数据集:包含80个胆囊切除手术视频,标注了7种器械SurgicalTools数据集:包含超过10,000张手术器械图像,涵盖21类常见器械手术剪(Scissors)止血钳(Hemostat)持针器(Needle Holder)手术刀(Scalpel)镊子(Forceps)拉钩(Retractor)吸引器(Suction) 阅读详情

相关推荐

从零开始:DJI-F450无人机硬件组装全流程解析

本文详细解析了DJI-F450无人机的硬件组装全流程,从开箱清点到焊接、机械组装、飞控系统搭建、电路整合及调试试飞。重点介绍了电调焊接、机臂安装、飞控校准等关键步骤的实用技巧和常见问题解决方案,帮助无人机爱好者从零开始完成专业级组装。

weixin_29210759的博客 623

.Net学习——委托

委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。调用委托变量时,就是执行该变量指向的方法。委托与c#中的普通变量【如int i=5】类似,唯一区别在于委托指向方法,普通变量执向整数为5的空间委托声明决定了可由该委托引用的方法。委托可指向一个与其具有相同标签的方法。关键字 返回类型 委托的名称 参数列表。

contact97的博客 3391

华为交换机链路聚合对接思科交换机链路聚合故障

2台华为交换机采用堆叠方式与思科交换机之间使用链路聚合,华为交换机与cisco交换机链路捆绑接口频繁UP/DOWN,业务中断。

网络工程师日常的博客 2120

【.net6第二章】委托与事件

委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用。在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联。跟方法有点类似,有参数有返回值,拥有关键字delegate,是一种特殊的访问。委托的本质是个一个类,继承自特殊类MulticastDelegate(无法继承),MulticastDelegate继承自Delegate类。委托可以通过new实例化,要求传递一个和这个委托的参数和返回值完全匹配的方法。//初始化关联信息//学校公告发布者Id = 111,

CZ_TyT的博客 2595

基于AXI PCIE IP的FPGA PCIE卡示意图

如果在上图中的AXI互联IP上再连接一个带AXI Slave接口的BRAM控制器,这个BRAM控制器连接一个BRAM,Host PC在系统主存中分配了一些不连续的内存,Host PC可以将这些内存段的起始地址(当然要先转为PCIE总线地址)写到AXI总线上的BRAM中,这样AXI CDMA读取BRAM,将读取到的PCIE总线基地址写到AXIPCIE寄存器块中的AXIBAR2PCIEBAR_n寄存器中,这样就实现了SG DMA。通过动态改变AXIBAR2PCIEBAR_n寄存器的值,可以实现多通道DMA。

csdn_gddf102384398的博客 1624

量子密钥分发系统设计与实现(一):系统基本架构讨论

本文主要对量子密钥分发系统中的基础架构和基于系统的量子密钥协商过程进行了初步讨论,为后期系列文章进行铺垫。

量子领域相关话题 3899

.Net中的委托与事件(DelegateEvent)

委托 委托的简单运用 一个委托类型定义了该类型的实例能调用的一类方法,这些方法含有同样的返回类型和同样的参数(形参和个数相同)。委托和接口一样,可以定义在类的外部。如下定义的一个委托类型 - Calculator: delegate int Calculator (int x); 此委托适用任何有着 int 返回类型和一个 int 类型参数的方法、如: static int Double ...

weixin_43965881的博客 1023

MIKE水动力笔记2_水动力基础理论知识

本文所讲内容是水动力基础理论知识,所参考的主要书籍是《水动力学和水质》(第二版,季振刚著,海洋出版社)。

晏长街的博客 1万+

.net----委托和事件

在事件生产者类中添加有关发生事件的代码,即当满足某种条件时(发生事件),则调用委托,即调用多播事件委托实例封装的调用列表中添加的事件处理方法。每一个值参数(没有 ref 或 out 修饰符的参数)都存在从D中的参数类型到M中的对应参数类型的标识或隐式引用转换。通过“+=”向多播事件委托实例封装的调用列表中添加事件处理方法,或通过“-=”从多播事件委托实例封装的调用列表中删除事件处理方法;在事件生产者类中声明一个事件成员,即某种事件处理委托(简称为事件委托)的实例(多播事件委托实例);

醉卧考场君莫笑 1883

“反激电源”是AC/DC隔离电源还是DC/DC隔离电源?

所以在一些场景,我们的输入电压是一个DC,但是我们仍然需要隔离电源的需求,我们就会只采用图9.2的右半部分。在这个场景下“反激电源”是DC/DC。所以此AC/DC的本质是将AC变成高压的DC之后,用带隔离变压器的反激式开关电源产生一个隔离的、稳定的直流电压。一般在讲述各种电源的拓扑的文章和书籍都是在讲述AC/DC的电源拓扑分类的时候,讲述Flyback。反激式开关电源是指使用反激高频变压器隔离输入输出回路的开关电源,反激式隔离变压器开关电源重点表述的是开关电源包含变压器的拓扑结构。

qq_43416206的博客 1299

1.为什么要学习SIMULINK

用户也可以自定义和创建自己的模块,利用这些模块,用户可以创建层次化的系统模型,可以自上而下或自下而上地阅读模型,也就是说,用户可以查看最顶层的系统,然后通过双击模块进入下层的子系统查看模型,这不仅方便了工程人员的设计,而且可以使自己的模型方块图功能更清晰,结构更合理。此外,利用示波器模块或其他的显示模块,用户可以在仿真运行的同时观察仿真结果,而且还可以在仿真运行期间改变仿真参数,并同时观察改变后的仿真结果,最后的结果数据也可以输出到MATLAB工作区进行后续处理,或利用命令在图形窗口中绘制仿真曲线。

FPGA/MATLAB学习教程/源码/项目合作开发 1547

C# 筑基--解密委托与事件

委托是一种用来包装方法的特殊类型,可以将方法包装为对象进行传递、调用,类似函数指针。delegate 关键字用来定义一个委托类型,语法类似方法申明,可以看做是一个"方法签名模板",和方法一样定义了方法的返回值、参数。

DotNet技术匠 250

【超详细】计算机组成原理总结及思维导图

计算机组成 第一章 计算机系统概论 冯诺依曼型计算机特点 1.计算机由运算器,控制器,存储器,输入和输出设备5部分组成 2.采用存储程序的方式,程序和数据放在同一个存储器中,并以二进制表示。 3.指令由操作码和地址码组成 4.指令在存储器中按执行顺序存放,由指令计数器(即程序计数器PC)指明要执行的指令所在的储存单元地址,一般按顺序递增,但可按运算结果或外界条件而改变 5.机器以运...

圣三一 10万+

vb.net中的委托与事件

委托是CTS(公共类型系统)规定的5种类型之一(类类型、结构类型、接口类型、枚举类型、委托类型)它是一种类型可以用来调用其他对象的方法,也称为函数指针。其实在vb.net中委托也可以当做是可以用来共享其他对象的方法的对象。当程序必须通过调用一个方法来执行某个操作(调用某个方法),但在编译时不知道该方法是什么时,就可以使用委托。委托允许在程序运行时指定调用的方法,委托的特点是面向对象的,类型是安全的

不忘初心 ,方得始终 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VB.NET下的事件和委托

委托是可用于调用其他对象方法的对象。它们有时被称为类型安全函数指针,因为它们与其他编程语言中所使用的函数指针相似。但不同于函数指针,Visual Basic .NET 委托是基于System.Delegate类的引用类型,它可以引用共享方法 —无需特定的类实例即可调用的方法和实例方法。 委托在调用过程和被调用过程需要媒介的情况下是很有用的。例如,您可能想让一个引发事件的对象能够在不同的环境下...

阿亮的专栏 1483

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

.Net的委托和事件的直接理解

初学者在理解委托和事件时常常被msdn搞糊涂,为了让初学.net的人快速应用.net的委托和事件模型编程,我在这里主要是提出理解的关键,以下代码都可直接运行,先看下面的代码。using System;namespace delegeteTest{class delegeteClass{public delegate void fHandler(int a); //关键-此行可以看成

侯廷文 专栏 727

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

.net 中委托与事件的理解!

假如我定义了这样一个委托:public  delegate void Feedback(object sender,EventArgs e);注意,如果没有学习过委托,看这句代码好象只是一个函数,其实这句话真正的用意是定义一个委托类型,如果你了解他在.net框架里面的具体形式,完全可以这样写: public class Feedback:System.MulticastDelagate{//构造器

lyb_abiandbel的专栏 3353

.net的委托和事件的直接理解

                                                初学者在理解委托和事件时常常被msdn搞糊涂,为了让初学.net的人快速应用.net的委托和事件模型编程,我在这里主要是提出理解的关键,以下代码都可直接运行,先看下面的代码。using System;namespace delegeteTest{                  class

xiaha3的专栏 976

.Net 机制下委托(一) 事件委托

一、 认识委托 一个简单的例子: 张三看到餐桌上有一个桔子,由于自己怕动(主要是出于自己要玩游戏,走不开),立刻就对着他妈妈喊:“我要吃桔子,妈妈帮我拿过来。”,接着,他妈妈听到乖儿子要吃桔子,就立刻送去给儿子了。 从某种意义上来说,把儿子发出消息要桔子的动作与妈妈送桔子给...

chouyin6942的博客 141

.NET 机制下的事件委托

<br /><br />      最近的一个项目要大量采用Excel作为数据源,从Excel导入数据到数据库是必不可少的,以前的方法都不是很理想,今天闲下来思考思考,最后决定采用线程池维护Excel各个Sheet页得导入,并引入事件通知机制。<br />      以前项目中也采用过事件通知机制,但当时都很迷糊,没能真正理解,今天在编码的时候查了下相关资料。<br /><br />      如下资料转自网络,希望对初学者有所帮助。<br /><br /><br />一、 认识委托<br />    一个

Terry's Space 970

C# .Net 委托和事件的区别

   在.net中,事件是一种特殊的委托,那他到底特殊在哪,换句话说,加上event关键字到底有什么用,我理解主要有两方面,下面用实例说明:    一 、事件只能在本类型内部“触发”,委托不管在本类型内部还是外部都可以“调用”。   举个例子,按钮的Click事件只有在鼠标点击按钮才能触发,没有例外;但如果Click是委托的话,我可以通过代码直接调用这个委托,就可以使得Click事件中

azkaser的专栏 1万+

net的委托和事件的直接理解

我先谈一下控件里的"On事件名"这个函数 如:OnTextChange(EventArgs e),类似的有很多,实际上这是一种编程方面的习惯,他代表的是引发这个TextChanged事件(当然和上面一样,包含一个委托onTextChanged和一个event包装),具体的说就是在Text变量已经被赋值后执行的一个函数OnTextChanged(),OnTextChanged()里面包含了类似onTextChanged(e)这样的引发事件的代码。//合并生成新的]函数列表。//关键-此行可以看成类的声明。

biyusr的专栏 750

.net WinForm 控件的事件委托剖析

关键字: Delegate, MulticastDelegate, EventHandler, EventHandlerList, EventHandlerList.ListEntry, Control, Component 首先从controlInstance.Click事件开始. 用Reflector反编译System.Windows.Forms.Control类可以看到对Click事件的定义

AOL's Web Log 4395

深入理解.net的事件与委托机制

深入理解.net的事件与委托机制       今天是我在公司里没有任务安排的一天(好难得哦),我决定研究系统的研究一下.net中的事件与委托的机制和原理。以前都是大概的默默忽忽的晓得点,不是很全面,今天我打算要全方位的理解原理,废话就到这里下面进入正题.事件是特殊的委托(这是个人理解)  首先介绍一个为什么要在事件中引入委托这个概念:         事件是对象发送的消息,以发信号通知操作的发

守护麦田 893
上一篇: 文章标题
下一篇: ajax +.net mvc 多图片上传加预览
_徐林
博客等级 码龄9年 6粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值