提到委托就要想到事件。
关于委托
1)委托是一种类型。但是委托定义了方法的类型。
2)这样,把方法做为参数进行传递成为可能。
形式
delegate void GreetingDelegate(string name);
void EnglishGreeting(string name)
void ChineseGreeting(string name)
签名相同的方法就是委托类型的,以上两种方法便是委托类型的。
传参数时只传方法名。如:直接传EnglishGreeting
委托链(作用是批处理):
委托不同于string的一个特性:可以将多个方法捆绑(委托、注册)到同一个委托对象上,形成委托链,当调用这个委托对象的时候,将依次调用委托链中的方法。
namespace WindowsFormsApplication1
{
public delegate void Greeting(string name);//定义委托,委托是定义方法的类型
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//定义两个方法,签名(形式)与委托的签名相同。
private void EnglishGreeting(string name) {
MessageBox.Show("Hello,"+name);
}
private void ChineseGreeting(string name) {
MessageBox.Show("你好,"+name);
}
//使方法成为参数成为可能
private void MakeGreeting(string name, Greeting greeting) {
greeting(name);
}
private void Form1_Load(object sender, EventArgs e)
{
MakeGreeting("Kobe", EnglishGreeting);//调用方法
MakeGreeting("科比", ChineseGreeting);
Greeting delegate1 = new Greeting(EnglishGreeting);//声明委托对象,就把方法EngishGreeting委托给对象delegate1了,也可以说委托对象delegate1代表方法EngishGreeting,以委托对象就可以采用下种用法了。
delegate1("Kobe");
delegate1 = ChineseGreeting;//委托对象的重新赋值
delegate1("科比");
//委托链,实现批处理
delegate1 += EnglishGreeting;
delegate1 += ChineseGreeting;
delegate1("中国");
}
}
}
事件
关于事件的说法:
1)委托是一种自定义的类型。委托定义了方法的类型。
2)事件是委托的实例。使用委托实例的委托链注册一些方法。使用+=注册,-=撤销
3)当事件发生的时候,调用委托链中的这些方法。不妨称这些方法为事件处理函数。
举例:
热水器发出水开的事件
警报器接受这个事件,做出相应的动作
显示器接受这个事件,做出相应的动作
如果想让报警器和显示器能接受到这个事件,那么方法需要注册这个事件。
using Delegate;//引入命名空间
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//声明三个对象
Heater heater=new Heater ();
Alarm alarm=new Alarm ();
Display display=new Display ();
heater .BoilEvent +=alarm .Alert ;//注册方法
heater .BoilEvent +=display .ShowMsg ;
heater .BoilWater ();
}
}
}
namespace Delegate
{
//热水器类
public class Heater
{
private int temperature = 0;
public delegate void BoilHandler(int param);//委托是方法的类型
public event BoilHandler BoilEvent;//事件是委托的实例,把方法委托给实例,实例就代表了方法。
public void BoilWater() {
for (int i = 0; i <=100 ; i++)
{
temperature++;
if (temperature ==99&&BoilEvent !=null)
{
BoilEvent(temperature);//实例代表了方法,所以可以用这种形式
}
}
}
}
//报警器类
public class Alarm
{
public void Alert(int temperature)
{
MessageBox.Show("水开了,温度为"+temperature .ToString ());
}
}
//显示器类
public class Display
{
public void ShowMsg(int temperature)
{
MessageBox.Show("水温现在是:"+temperature .ToString ());
}
}
分享到:
相关推荐
委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件。对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件...
实现基本的委托与事件的联合使用,主要区分了方法所在的位置
一个简单的委托与事件的 demo,通过timer控件不断触发,而更新时间!帮助理解委托与事件的实际运用
根据经典的实例,详细而全面的介绍了c#委托与事件,以及他们之间的关系
介绍C#中委托与事件的示例代码,阐述了委托和事件的密切联系,展现C#的迷人魅力。
.NET委托与事件用例.NET委托与事件用例.NET委托与事件用例.NET委托与事件用例.NET委托与事件用例.NET委托与事件用例.NET委托与事件用例
C#编写的委托与事件的十个精典的例子(可以直接运行)C#编写的委托与事件的十个精典的例子(可以直接运行)C#编写的委托与事件的十个精典的例子(可以直接运行)
天轰穿老师VS2010趣味编程视频教程,第25讲,委托与事件实例浅析,FLV格式,压缩包自带10%恢复记录
金旭亮《C#面向对象程序设计》教案_6:委托与事件。此教案重点介绍.NET平台上的重要技术——委托,以及对建立于委托基础之上的.NET事件响应机制的深入剖析。包括两个29页的PDF文档及数个VS2010示例。前几讲的教案请...
这是关于委托与事件的详细说明,文章风趣的写作手法让您能充分领会c#中的委托与事件的概念。
c#中的委托与事件把委托事件讲透 读书笔记 学习心得 经典中的经典,彻底弄清楚委托事件,明白他们的本质,并有适合的例子说明
委托与事件,举例描述了委托与事件,非常易懂,值得一看!强烈推荐
C#委托与事件讲解.doc 超简单,特易懂。
委托和事件这两个概念是完全配合的。委托可以看成是函数指针,那就是说,它能够引用对象方法,通过传递地址的机制完成。委托是一个类,当你对它实例化时,要提供一个对象方法,将其作为它构造函数的参数。
委托与事件之猫抓老鼠
委托与事件示例代码,自己博客的示例代码,博客地址: http://blog.csdn.net/qiujialongjjj/article/details/8229308
深入浅出,委托与事件.很不错,希望对初学者学习这个方面的知识有所帮助
C# 委托与事件,实例代码,调试通过.人个认为对理解C#的委托与事件会有一定的帮助.
.net委托与事件设计模式我作为初学者理解了很久,借鉴了别人的成果自己写了一个易懂的代码,希望对初学者有用。