.NET基础示例系列之六:委托及事件
委托是一个类。
定义委托时,实是定义一个用户自定义的类,它能代表具有相同参数列表和返回类型的任何方法,方法可以是静态方法或成员方法。示例:
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基础示例系列之六:委托及事件相关推荐
- C#基础加强(8)之委托和事件
委托 简介 委托是一种可以声明出指向方法的变量的数据类型. 声明委托的方式 格式: delegate <返回值类型> 委托类型名(参数) ,例如: delegate void MyDel( ...
- 【转】[C# 基础知识系列]专题四:事件揭秘
引言: 前面几个专题对委托进行了详细的介绍的,然后我们在编写代码过程中经常会听到"事件"这个概念的,尤其是写UI的时候,当我们点击一个按钮后VS就会自动帮我们生成一些后台的代码,然 ...
- .NET基础示例系列之二十三:WebRequest、WebResponse及刷票程序
卧佛寺畔寻常路,萼新绿,香如故. 东君闲情有几许?犹寒燕赵,早春浪屿,南北各风物. 红墙紫禁春寒处,最是艰难返乡路. 羡煞东风无束缚,江南江北,无凭鳞羽,一夜即飞度. 送上一首以前写的〈青玉案〉,年年 ...
- .NET基础示例系列之十六:制做进程监视器
1)可以查看进程的各项基本信息,如cpu,内存,父进程,执行路径,创建者等 2)可以中止进程,创建新进程 3)可以配置目标进程,配置刷新速度 最终效果图: (以下给出部分代码,其余像进程的创建.中止等 ...
- .NET基础示例系列之十七:VML绘制中国地图
VML相当于IE里面的画笔,能实现你所想要的图形,而且结合脚本,可以让图形产生动态的效果.同时对VML图形进行缩放,变换位置也变得异常容易.对于VML的基本概念,网上有若干个版本的中文教程,大家可以去 ...
- .NET基础示例系列之二十:对图片的几种简单处理
又有一段时间没有更新了,缺少学习的热情了.今天贴几个图片处理的小技巧,希望对大家有用: (1)如何获取.gif图片中的各个帧? (2)如何获取图片的缩略图? (3)如何"截取"图片 ...
- .NET基础示例系列之二十四:家谱软件(1)
最近忙于摆弄Oracle方面的东西,C#的功课落下了不少,趁着还没手生,把前段时间断断续续写的WPF家谱小软件拿出来整理一下,好记性不如烂笔头,先截两张图放着,后续再写写中间一些问题.已解决的是: 1 ...
- 第九节:委托和事件(1)(委托的发展历史、插件式编程、多播委托)
一. 委托的发展历史和基本用法 说起委托,每个人可能都会对他有不同的理解,结合实战中委托的使用,我对其理解是:委托和类一样,是用户的一个自定义类型,委托可以有参数.有返回值,委托的关键字是delega ...
- CSharp(C#)语言_委托和事件区别详解
委托和事件区别详解 委托和事件的概念 委托 事件 委托和事件的作用 委托 事件 委托和事件的区别 委托和事件的详细解答请看C#系列文章 委托和事件代码实践 委托 事件 总结 委托和事件的概念 委托 ...
最新文章
- 斩获23项冠军,日均调用破万亿!百度交出年度AI成绩单:语音语言领衔技术突破,国产自研成大趋势...
- 解决小米手机无法收到开机广播的问题
- @FindBy、@FindBys、@FindAll的区别
- 时间序列因果关系_分析具有因果关系的时间序列干预:货币波动
- java大整数_java处理大整数
- windows 防火墙疑难解答程序_Win8系统设置允许程序通过防火墙的方法
- ios开发网络学习九:NSURLSessionDownloadTask实现大文件下载
- osi模型_OSI模型
- python 映射网络驱动器_用Delphi实现网络驱动器的映射和断开
- C/C++[codeup 1934,1932,1935]查找
- mysql 定义外键并增删改查_MYSQL增删改查添加外键
- logo字体设计心法
- 金山词霸2010牛津旗舰破解版【最完美的】的使用方案
- 爬取京东商城中的书籍信息
- BUG处理:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path buil
- 群晖自动删除重复文件_在群晖中批量删除重复文件(零基础手把手图文)
- 通过硬盘iso文件安装ubuntu
- 我的世界未能从服务器注册表数据,【经验之谈】“User Profile Service 服务未能登录,无法加载用户配置文件”实战历程...
- [Odoo] Odoo 上传附件 attachment
- 放置js文件的公开服务器,node.js搭建简单静态文件服务器
热门文章
- AI 是否拥有意识?从意识的定义说起
- 图机器学习有多大神力?
- Uber准备放弃自动驾驶,转手卖给前谷歌无人车CTO,估值曾被孙正义炒到72.5亿美元...
- 为给微芯片拍照,IBM小哥用乐高拼了个电动显微镜,搭载树莓派,360度无死角拍摄...
- 清华学霸震撼演讲:“你可曾为学习拼尽全力?”
- 循环神经网络实现文本情感分类之Pytorch中LSTM和GRU模块使用
- 必看干货:如何在 JavaScript 中实现 8 种基本图形算法
- 数学推导+纯Python实现机器学习算法12:贝叶斯网络
- 如何利用图像预处理提高OCR的准确性?
- 对象检测和图像分割有什么区别?