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# 委托和事件(总结篇)相关推荐

  1. 第三天:js中的事件提高篇(事件流,事件对象,事件委托深层次理解)

    目录 前言 一,基础部分 1.1 js监听并绑定事件 1.2 删除事件绑定 二,事件流 2.1 事件流是什么 2.2 事件流模型 2.3 捕获与冒泡具体示例 2.3.1 addEventListene ...

  2. 对张子阳先生对委托和事件的两篇文章的读后思考(说得很透,内附故事一篇)...

    第一篇 C#中的委托和事件 第二篇 C#中的委托和事件(续) 首先,张子阳先生的这是两篇关于委托和事件间关系的文章,是目前为止我读过的介绍委托和事件以及异步调用最简明清晰文章,作者通过非常有节奏的&q ...

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

    这两个概念长时间不用了,今天看到CAD二次开发中用到了自定义事件,有点迷糊了,索性再整理一下加深印象! 一说到委托和事件,他们总是绑定在一起的不可分割!可能你会说啊!这有什么用啊?尽管你没有在意,但是 ...

  4. [C#]委托和事件(讲解的非常不错)

    引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...

  5. C#综合揭秘——深入分析委托与事件

    引言 本篇文章将为你介绍一下 Delegate 的使用方式,逐渐揭开 C# 当中事件(Event)的由来,它能使处理委托类型的过程变得更加简单. 还将为您解释委托的协变与逆变,以及如何使用 Deleg ...

  6. 一个插排引发的设计思想 (三) 委托与事件

    一个插排引发的设计思想 (一) 观察者模式 一个插排引发的设计思想 (二) 抽象类与接口 一个插排引发的设计思想 (三) 委托与事件 ...待续.... 前两篇文章循序渐进的介绍了观察者模式.抽象类和 ...

  7. 【.NET基础】--委托、事件、线程(2)

    本文介绍event的使用以及原理,本文接上一篇文章的Demo继续[下载上一篇Demo] 上一篇我们在类(dg_SayHi.cs)里面定义代理了4个Delegate,然后在Button的后台事件中 新建 ...

  8. 庖丁解牛看委托和事件(续)

    上一篇文章:庖丁解牛--深入解析委托和事件之后,以一题面试题来总结事件 using System; using System.Collections.Generic; using System.Lin ...

  9. [C#]委托和事件(详细讲解)

    引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...

最新文章

  1. 清理C盘无用的垃圾的文件,给c盘瘦身
  2. 手写logback_springboot logback调整mybatis日志级别无效的解决
  3. Unity 4.3 2D 教程:新手上路
  4. 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理
  5. java接受微信回调_SpringMvc微信支付回调示例代码
  6. matlab人民币识别,Matlab图像处理学习笔记(六):基于sift特征点的人民币识别...
  7. am5728 是否支持aarch64_AM5728高性能音视频处理开发板介绍
  8. 一步步实现SDDC-分布式交换机入门
  9. PHP包含文件函数include、include_once、require、require_once区别和总结
  10. Laravel框架和TP框架区别
  11. app漏洞扫描原理_绿盟--漏洞扫描系统NSFOCUS RSAS-S-v5.0
  12. Tomcat8安装与配置
  13. Axure Share ——原型设计工具 Axure ,移动版
  14. 初识人工智能,机器学习,深度学习的关系(概念)
  15. 借助Amazon EMR与外部KDC进行身份认证,有效集成业务场景
  16. 农民股神六万元博出千万身家
  17. 通过EverEdit工具连接Linux系统远程操作文件
  18. 计算机类期刊审稿周期及录用比例
  19. astar不能用了_解锁不可切除肝癌治疗的新时代——“T+A”北美上市会纪要
  20. 判断线程池任务执行完成

热门文章

  1. Axel与Wget下载工具
  2. Interface实现多态简例
  3. Google Map App 问题集锦
  4. Oracle 序列的创建和使用
  5. Python命名空间
  6. 0016-Avro序列化反序列化和Spark读取Avro数据
  7. Python基础之格式化输出函数format()功能详解
  8. java基础面试题:java中实现多态的机制是什么?
  9. Effective stl---笔记
  10. 大数据2 Hadoop伪分布模式配置部署