c# 委托和事件(总结篇)
c# 委托和事件(总结篇)
概念:
delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类。与其它的类不同,delegate类能够
拥有一个签名(signature),并且它"只能持有与它的签名相匹配的方法的引用"。它所实现的功能与C/C++中的函数指针
十分相似。它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m。但与函数指针相比,
delegate有许多函数委托和事件在 .Net Framework中的应用非常广泛指针不具备的优点。首先,函数指针只能指向静态
函数,而delegate既可以引用静态函数,又可以引用非静态成员函数。在引用非静态成员函数时,delegate不但保存了对
此函数入口指针的引用,而且还保存了调用此函数的类实例的引用。其次,与函数指针相比,delegate是面向对象、类型
安全、可靠的受控(managed)对象。也就是说,runtime能够保证delegate指向一个有效的方法,你无须担心delegate会
指向无效地址或者越界地址。
2、创建步骤
(1)、声明一个delegate对象,它应当与你想要传递的方法具有相同的参数和返回值类型。
(2)、创建delegate对象,并"将你想要传递的函数作为参数传入"。
(3)、在要实现异步调用的地方,通过上一步创建的对象来调用方法。
3、代码实现
namespace EventLearn003 {//1 申明一个delegate对象public delegate void myDelegate(string name);class Program{//这个是要传递的方法,该方法与定义的委托 具有相同的参数和返回值,函数名可以不相同滴呀public static void OutPut(string sname){Console.WriteLine("Hi , "+sname);}static void Main(string[] args){//这个 仅仅是基本的使用方法,想看更多的内容,请看我委托的另外一篇滴呀myDelegate de = new myDelegate(OutPut);de("jack");Console.ReadLine();}} }
事件(Event)
概念:
C#中的事件处理实际上是一种具有特殊签名的delegate,象下面这个样子:public delegate void MyEventHandler
(object sender, MyEventArgs e);
其中的两个参数,sender代表事件发送者,e是事件参数类。MyEventArgs类用来包含与事件相关的数据,所有的事件参数
类都必须从System.EventArgs类派生。当然,如果你的事件不含参数,那么可以直接用System.EventArgs类作为参数。
2、创建步骤
(1)、定义delegate对象类型,它有两个参数,第一个参数是事件发送者对象,第二个参数是事件参数类对象。
(2)、定义事件参数类,此类应当从System.EventArgs类派生。如果事件不带参数,这一步可以省略。
(3)、定义"事件处理方法,它应当与delegate对象具有相同的参数和返回值类型"。
(4)、用event关键字定义事件对象,它同时也是一个delegate对象。
(5)、用+=操作符添加事件到事件队列中(-=操作符能够将事件从队列中删除)。
(6)、在需要触发事件的地方用调用delegate的方式写事件触发方法。一般来说,此方法应为protected访问限制,既
不能以public方式调用,但可以被子类继承。名字是OnEventName。
(7)、在适当的地方调用事件触发方法触发事件。
3、代码实现
更具实用的情况不一样,代码可能也会有所差别,这里就不列出了,
转载于:https://www.cnblogs.com/mc67/p/5079708.html
c# 委托和事件(总结篇)相关推荐
- 第三天:js中的事件提高篇(事件流,事件对象,事件委托深层次理解)
目录 前言 一,基础部分 1.1 js监听并绑定事件 1.2 删除事件绑定 二,事件流 2.1 事件流是什么 2.2 事件流模型 2.3 捕获与冒泡具体示例 2.3.1 addEventListene ...
- 对张子阳先生对委托和事件的两篇文章的读后思考(说得很透,内附故事一篇)...
第一篇 C#中的委托和事件 第二篇 C#中的委托和事件(续) 首先,张子阳先生的这是两篇关于委托和事件间关系的文章,是目前为止我读过的介绍委托和事件以及异步调用最简明清晰文章,作者通过非常有节奏的&q ...
- 还弄不明白【委托和事件】么?看这一篇就足够了!!!
这两个概念长时间不用了,今天看到CAD二次开发中用到了自定义事件,有点迷糊了,索性再整理一下加深印象! 一说到委托和事件,他们总是绑定在一起的不可分割!可能你会说啊!这有什么用啊?尽管你没有在意,但是 ...
- [C#]委托和事件(讲解的非常不错)
引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...
- C#综合揭秘——深入分析委托与事件
引言 本篇文章将为你介绍一下 Delegate 的使用方式,逐渐揭开 C# 当中事件(Event)的由来,它能使处理委托类型的过程变得更加简单. 还将为您解释委托的协变与逆变,以及如何使用 Deleg ...
- 一个插排引发的设计思想 (三) 委托与事件
一个插排引发的设计思想 (一) 观察者模式 一个插排引发的设计思想 (二) 抽象类与接口 一个插排引发的设计思想 (三) 委托与事件 ...待续.... 前两篇文章循序渐进的介绍了观察者模式.抽象类和 ...
- 【.NET基础】--委托、事件、线程(2)
本文介绍event的使用以及原理,本文接上一篇文章的Demo继续[下载上一篇Demo] 上一篇我们在类(dg_SayHi.cs)里面定义代理了4个Delegate,然后在Button的后台事件中 新建 ...
- 庖丁解牛看委托和事件(续)
上一篇文章:庖丁解牛--深入解析委托和事件之后,以一题面试题来总结事件 using System; using System.Collections.Generic; using System.Lin ...
- [C#]委托和事件(详细讲解)
引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...
最新文章
- 清理C盘无用的垃圾的文件,给c盘瘦身
- 手写logback_springboot logback调整mybatis日志级别无效的解决
- Unity 4.3 2D 教程:新手上路
- 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理
- java接受微信回调_SpringMvc微信支付回调示例代码
- matlab人民币识别,Matlab图像处理学习笔记(六):基于sift特征点的人民币识别...
- am5728 是否支持aarch64_AM5728高性能音视频处理开发板介绍
- 一步步实现SDDC-分布式交换机入门
- PHP包含文件函数include、include_once、require、require_once区别和总结
- Laravel框架和TP框架区别
- app漏洞扫描原理_绿盟--漏洞扫描系统NSFOCUS RSAS-S-v5.0
- Tomcat8安装与配置
- Axure Share ——原型设计工具 Axure ,移动版
- 初识人工智能,机器学习,深度学习的关系(概念)
- 借助Amazon EMR与外部KDC进行身份认证,有效集成业务场景
- 农民股神六万元博出千万身家
- 通过EverEdit工具连接Linux系统远程操作文件
- 计算机类期刊审稿周期及录用比例
- astar不能用了_解锁不可切除肝癌治疗的新时代——“T+A”北美上市会纪要
- 判断线程池任务执行完成