委托是一个类。

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

public partial class Form1 : Form

{

private void button1_Click(object sender, EventArgs e)

{

MyClass mc = new MyClass();

mc.dlg = new MyDelegate(DlgMethod);

mc.dlg += new MyDelegate(DlgMethod2);//多播

mc.TriggerDlg();

}

private void DlgMethod(string s)

{

//do some work

MessageBox.Show(s);

}

private void DlgMethod2(string s)

{

//do some work

MessageBox.Show("multicast:"+s);

}

}

public delegate void MyDelegate(string s);

class MyClass

{

public MyDelegate dlg;

public void TriggerDlg()

{

if (dlg != null)

{

dlg("param string for delegate");

}

}

}

事件是委托的一个实例。

《C#程序员参考手册》:C#使用一种委托模型来实现事件。事件的处理方法不必在将生成事件的类中定义。这种机制有许多优势。例如,它既有普遍性,又很灵活。设想应用程序中有两个按钮,但这两个按钮的作用不同。如果事件处理程序被绑定到事件源,我们可能必须写两个派生的按钮类,每个派生类有自己的事件处理程序。

……事件生成者把事件委托的一个实例定义为它的成员。事件消费者是那些希望在事件发生时得到通知的对象。它们定义将和事件委托关联的事件处理方法。当生成事件时,事件生成者通过调用事件委托“触发”事件。然后委托调用和它关联的事件处理方法。示例:

public delegate void MyDelegate(string s);

class MyClass

{

public event MyDelegate myEventHandler;

public List<string> l;

public MyClass()

{

l = new List<string>();

}

public void AddElement(string s)

{

l.Add(s);

if (myEventHandler!=null)

{

myEventHandler("add element:"+s);

}

}

}

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

MyClass mc = new MyClass();

mc.myEventHandler+=new MyDelegate(mc_myEventHandler);

mc.AddElement("Book1");

}

private void mc_myEventHandler(string s)

{

MessageBox.Show(s);

}

}

转载于:https://www.cnblogs.com/morvenhuang/archive/2006/08/26/486940.html

.NET基础示例系列之六:委托及事件相关推荐

  1. C#基础加强(8)之委托和事件

    委托 简介 委托是一种可以声明出指向方法的变量的数据类型. 声明委托的方式 格式: delegate <返回值类型> 委托类型名(参数) ,例如: delegate void MyDel( ...

  2. 【转】[C# 基础知识系列]专题四:事件揭秘

    引言: 前面几个专题对委托进行了详细的介绍的,然后我们在编写代码过程中经常会听到"事件"这个概念的,尤其是写UI的时候,当我们点击一个按钮后VS就会自动帮我们生成一些后台的代码,然 ...

  3. .NET基础示例系列之二十三:WebRequest、WebResponse及刷票程序

    卧佛寺畔寻常路,萼新绿,香如故. 东君闲情有几许?犹寒燕赵,早春浪屿,南北各风物. 红墙紫禁春寒处,最是艰难返乡路. 羡煞东风无束缚,江南江北,无凭鳞羽,一夜即飞度. 送上一首以前写的〈青玉案〉,年年 ...

  4. .NET基础示例系列之十六:制做进程监视器

    1)可以查看进程的各项基本信息,如cpu,内存,父进程,执行路径,创建者等 2)可以中止进程,创建新进程 3)可以配置目标进程,配置刷新速度 最终效果图: (以下给出部分代码,其余像进程的创建.中止等 ...

  5. .NET基础示例系列之十七:VML绘制中国地图

    VML相当于IE里面的画笔,能实现你所想要的图形,而且结合脚本,可以让图形产生动态的效果.同时对VML图形进行缩放,变换位置也变得异常容易.对于VML的基本概念,网上有若干个版本的中文教程,大家可以去 ...

  6. .NET基础示例系列之二十:对图片的几种简单处理

    又有一段时间没有更新了,缺少学习的热情了.今天贴几个图片处理的小技巧,希望对大家有用: (1)如何获取.gif图片中的各个帧? (2)如何获取图片的缩略图? (3)如何"截取"图片 ...

  7. .NET基础示例系列之二十四:家谱软件(1)

    最近忙于摆弄Oracle方面的东西,C#的功课落下了不少,趁着还没手生,把前段时间断断续续写的WPF家谱小软件拿出来整理一下,好记性不如烂笔头,先截两张图放着,后续再写写中间一些问题.已解决的是: 1 ...

  8. 第九节:委托和事件(1)(委托的发展历史、插件式编程、多播委托)

    一. 委托的发展历史和基本用法 说起委托,每个人可能都会对他有不同的理解,结合实战中委托的使用,我对其理解是:委托和类一样,是用户的一个自定义类型,委托可以有参数.有返回值,委托的关键字是delega ...

  9. CSharp(C#)语言_委托和事件区别详解

    委托和事件区别详解 委托和事件的概念 委托 事件 委托和事件的作用 委托 事件 委托和事件的区别 委托和事件的详细解答请看C#系列文章 委托和事件代码实践 委托 事件 总结 委托和事件的概念 委托   ...

最新文章

  1. 斩获23项冠军,日均调用破万亿!百度交出年度AI成绩单:语音语言领衔技术突破,国产自研成大趋势...
  2. 解决小米手机无法收到开机广播的问题
  3. @FindBy、@FindBys、@FindAll的区别
  4. 时间序列因果关系_分析具有因果关系的时间序列干预:货币波动
  5. java大整数_java处理大整数
  6. windows 防火墙疑难解答程序_Win8系统设置允许程序通过防火墙的方法
  7. ios开发网络学习九:NSURLSessionDownloadTask实现大文件下载
  8. osi模型_OSI模型
  9. python 映射网络驱动器_用Delphi实现网络驱动器的映射和断开
  10. C/C++[codeup 1934,1932,1935]查找
  11. mysql 定义外键并增删改查_MYSQL增删改查添加外键
  12. logo字体设计心法
  13. 金山词霸2010牛津旗舰破解版【最完美的】的使用方案
  14. 爬取京东商城中的书籍信息
  15. BUG处理:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path buil
  16. 群晖自动删除重复文件_在群晖中批量删除重复文件(零基础手把手图文)
  17. 通过硬盘iso文件安装ubuntu
  18. 我的世界未能从服务器注册表数据,【经验之谈】“User Profile Service 服务未能登录,无法加载用户配置文件”实战历程...
  19. [Odoo] Odoo 上传附件 attachment
  20. 放置js文件的公开服务器,node.js搭建简单静态文件服务器

热门文章

  1. AI 是否拥有意识?从意识的定义说起
  2. 图机器学习有多大神力?
  3. Uber准备放弃自动驾驶,转手卖给前谷歌无人车CTO,估值曾被孙正义炒到72.5亿美元...
  4. 为给微芯片拍照,IBM小哥用乐高拼了个电动显微镜,搭载树莓派,360度无死角拍摄...
  5. 清华学霸震撼演讲:“你可曾为学习拼尽全力?”
  6. 循环神经网络实现文本情感分类之Pytorch中LSTM和GRU模块使用
  7. 必看干货:如何在 JavaScript 中实现 8 种基本图形算法
  8. 数学推导+纯Python实现机器学习算法12:贝叶斯网络
  9. 如何利用图像预处理提高OCR的准确性?
  10. 对象检测和图像分割有什么区别?