c#用委托来实现事件通知机制。委托相当与c++函数指针。整个过程涉及一个呼叫者,一个被呼叫者,还有就是这个委托。

- 实现步骤

有以下几步: 1. 申明委托, 2.定义呼叫者和调用的函数, 3.定义被呼叫者和具体实现的函数(被调用的函数)

1.申明委托 ,在包里或者类里,

public
  public delegate void PlayGame(Object sender, EventArgs e); 

2.定义呼叫者(类LetsGame)和调用委托的函数,在呼叫者里要有委托的实例(呼叫者扔出一个委托,被呼叫者给这个委托赋值)

class LetsGame{ 
    public event PlayGame theGame; 
    public void startPlay(EventArgs e){ 
        if(theGame != null){ 
        theGame(this,e); 
    } 

3. 定义被呼叫者(类MS)和具体实现的函数(被调用的函数),也就是concrete class的实现或者叫函数指针实例。打个比方,在一个叫MS的类中实现.MS中对呼叫者中委托的实例进行赋值.

class MS {
    public MS(LetsGame lg) {
        lg.theGame += new PlayGame(MSPlayGame);
    }
    public void MSPlayGame(Object sender, EventArgs e){ 
        Console.WriteLine("Who laughs the last who wins"); 
    } 
}

这样当调用LetsGame.startPlay的时候就会调用MS.MSPlayGame.

- 实际应用

对照一下c#的GUI事件处理或者asp.net的web控件事件处理,能帮我们更好的理解委托和事件.大家一定很熟悉asp.net里下面的代码

private void InitializeComponent()
{    
    
    this.Button1.Click += new System.EventHandler(this.Button1_Click);
}

private void Button1_Click(object sender, System.EventArgs e)
{
    //do sth
}

这 就是用委托来实现事件.你可能发现我们并没有给它声明委托对象并通过event关键字来引用该委托对象,那是因为asp.net早就帮我们做好了该项工 作,其委托对象是System.EventHandler. Button1相当于上面的LetsGame的实例,是呼叫者,Button1_Click是被呼叫方法.当你click Button1后,Button1就会调用Button1_Click.

-杂项

我觉得这种机制和design pattern里的observer很类似,我们完全可以用observer来达到同样的效果,但是用委托更灵活,不需要定义一个interface然后所有的concrete class都实现某个方法,函数指针(委托)更灵活.

还有,委托不一定非要和事件一起用,单独用的时候就是函数指针.

转载于:https://www.cnblogs.com/Shadow-Chen/archive/2009/03/04/1403354.html

【转】c#委托与事件相关推荐

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

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

  2. .NET基础示例系列之六:委托及事件

    委托是一个类. 定义委托时,实是定义一个用户自定义的类,它能代表具有相同参数列表和返回类型的任何方法,方法可以是静态方法或成员方法.示例: public partial class Form1 : F ...

  3. 大白话系列之C#委托与事件讲解(一)

    从序言中,大家应该对委托和事件的重要性有点了解了吧,虽然说我们现在还是能模糊,但是从我的大白话系列中,我会把这些概念说的通俗易懂的.首先,我们还是先说说委托吧,从字面上理解,只要是中国人应该都知道这个 ...

  4. 委托、事件、事件访问器

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 委托与事 ...

  5. js中的事件委托或是事件代理详解(转载)

    起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它 ...

  6. JS事件委托或者事件代理原理以及实现

    事件委托(事件代理)原理:简单的说就是将事件交由别人来执行,就是将子元素的事件通过冒泡的形式交由父元素来执行. 为什么要用时间委托? 在JavaScript中,添加到页面上的事件处理程序数量将直接关系 ...

  7. 对C#下函数,委托,事件的一点理解!

    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 今天一来是有点 ...

  8. 13委托和事件在观察者模式中的应用

    当一个被监视对象的方法执行会触发观察者Observer的方法的时候,我们就可以在被监视对象中声明委托和事件. 例子 有一个宠物追踪器挂宠物身上,只要宠物离开主人100米之外,主人手上的显示器显示警告信 ...

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

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

最新文章

  1. 南京超过广州!4 月程序员工资统计出炉,平均 14596 元
  2. 抖音开放平台 php-sdk 注意事项
  3. 数学图形(2.19) 利萨茹3D曲线
  4. 【数理知识】《矩阵论》方保镕老师-第7章-几类特殊矩阵与特殊积
  5. Hyperledger Besu(1)“系统框架”
  6. 启用SAP GUI FOR HTML
  7. 三心二意,助你好运?
  8. 教你玩转CSS表格(table)
  9. python市场需求如何_2020年Python市场前景广阔
  10. Jxl实现Excel的导入与导出
  11. 《Head First Servlets JSP》-11-Web应用部署
  12. Deeping Learning学习与感悟——《深度学习工程师》_1
  13. echarts中国以及各省市地图数据
  14. 计算机系统的四种启动方式是,电脑启动方式有几种你知道吗?
  15. 使用迅雷等下载工具下载Android SDK快速安装
  16. Python数据分析与挖掘实战学习12
  17. React基础(壹)———脚手架项目初始化
  18. 图解windows系统 硬盘主分区、扩展分区、逻辑分区的区别.
  19. c语言oj数据通过,OJ输入数据的处理
  20. 听雨小筑---开张纪念

热门文章

  1. 排序算法c语言和oc实现的,几种常用的排序算法,OC实现
  2. FPGA设计中MEMORY型数据怎么综合到blockRAM里面
  3. FFT频谱泄露和加窗 (一)
  4. 批量计算多个点到一个点的距离
  5. 浏览器和迅雷简单拿到动漫妹子图
  6. python实现复制文件功能
  7. 2018.8.17提高B组模拟考试
  8. 熟悉常用的HBase操作,编写MapReduce作业
  9. 标准模板库(STL)学习指南之map映射
  10. Web报表工具FineReport中JavaScript的使用