【转】c#委托与事件
- 实现步骤
有以下几步: 1. 申明委托, 2.定义呼叫者和调用的函数, 3.定义被呼叫者和具体实现的函数(被调用的函数)
1.申明委托 ,在包里或者类里,
public delegate void PlayGame(Object sender, EventArgs e);
2.定义呼叫者(类LetsGame)和调用委托的函数,在呼叫者里要有委托的实例(呼叫者扔出一个委托,被呼叫者给这个委托赋值)
public event PlayGame theGame;
public void startPlay(EventArgs e){
if(theGame != null){
theGame(this,e);
}
}
3. 定义被呼叫者(类MS)和具体实现的函数(被调用的函数),也就是concrete class的实现或者叫函数指针实例。打个比方,在一个叫MS的类中实现.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里下面的代码
{
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#委托与事件相关推荐
- [C#]委托和事件(讲解的非常不错)
引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...
- .NET基础示例系列之六:委托及事件
委托是一个类. 定义委托时,实是定义一个用户自定义的类,它能代表具有相同参数列表和返回类型的任何方法,方法可以是静态方法或成员方法.示例: public partial class Form1 : F ...
- 大白话系列之C#委托与事件讲解(一)
从序言中,大家应该对委托和事件的重要性有点了解了吧,虽然说我们现在还是能模糊,但是从我的大白话系列中,我会把这些概念说的通俗易懂的.首先,我们还是先说说委托吧,从字面上理解,只要是中国人应该都知道这个 ...
- 委托、事件、事件访问器
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 委托与事 ...
- js中的事件委托或是事件代理详解(转载)
起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它 ...
- JS事件委托或者事件代理原理以及实现
事件委托(事件代理)原理:简单的说就是将事件交由别人来执行,就是将子元素的事件通过冒泡的形式交由父元素来执行. 为什么要用时间委托? 在JavaScript中,添加到页面上的事件处理程序数量将直接关系 ...
- 对C#下函数,委托,事件的一点理解!
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 今天一来是有点 ...
- 13委托和事件在观察者模式中的应用
当一个被监视对象的方法执行会触发观察者Observer的方法的时候,我们就可以在被监视对象中声明委托和事件. 例子 有一个宠物追踪器挂宠物身上,只要宠物离开主人100米之外,主人手上的显示器显示警告信 ...
- C#综合揭秘——深入分析委托与事件
引言 本篇文章将为你介绍一下 Delegate 的使用方式,逐渐揭开 C# 当中事件(Event)的由来,它能使处理委托类型的过程变得更加简单. 还将为您解释委托的协变与逆变,以及如何使用 Deleg ...
最新文章
- 南京超过广州!4 月程序员工资统计出炉,平均 14596 元
- 抖音开放平台 php-sdk 注意事项
- 数学图形(2.19) 利萨茹3D曲线
- 【数理知识】《矩阵论》方保镕老师-第7章-几类特殊矩阵与特殊积
- Hyperledger Besu(1)“系统框架”
- 启用SAP GUI FOR HTML
- 三心二意,助你好运?
- 教你玩转CSS表格(table)
- python市场需求如何_2020年Python市场前景广阔
- Jxl实现Excel的导入与导出
- 《Head First Servlets JSP》-11-Web应用部署
- Deeping Learning学习与感悟——《深度学习工程师》_1
- echarts中国以及各省市地图数据
- 计算机系统的四种启动方式是,电脑启动方式有几种你知道吗?
- 使用迅雷等下载工具下载Android SDK快速安装
- Python数据分析与挖掘实战学习12
- React基础(壹)———脚手架项目初始化
- 图解windows系统 硬盘主分区、扩展分区、逻辑分区的区别.
- c语言oj数据通过,OJ输入数据的处理
- 听雨小筑---开张纪念