委托和事件:从猫和老鼠的故事看事件
2008-07-17 21:40
197 查看
1.委托的含义:
(MSDN)A delegate declaration defines a reference type that can be used to encapsulate a method with a specific signature.A delegate instance encapsulates a static or an instance method.Delegates are roughly similar to function pointers in C++;however,delegates are type-safe and secure.
委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。
我们可以这样理解委托:委托是函数的封装,它代表一“类”函数,它们都符合一定的签名:拥有相同的参数列表、返回值类型。同时,委托也可以看成是对函数的抽象,是函数的类,此时的实例代表一个具体的函数。
2.事件的理解:
C#使用委托模型来实现事件。事件生成者类中不用定义事件的处理方法;事件订阅者是那些希望在事件发生时得到通知的对象,它们定义将和事件委托关联的事件处理方法。当生成事件时,事件生成者通过调用事件委托“触发”事件,然后委托调用和它关联的事件处理方法。
3.猫和老鼠的例子
首先,我们设定一个简单场景来说明,夜深人静,屋里有老鼠蹑手蹑脚的行动,且随时提防着猫,如果听到猫叫,老鼠闻声立即逃回洞里。这个场景可以抽象为事件的几个要素:
猫和老鼠是两个对象,猫是事件生成者对象,猫叫是一个方法,引发Cry事件;老鼠是事件订阅者对象,它提供事件处理程序Run()方法;通过委托和事件实现了老鼠对猫动静的监听,结果是老鼠听到猫叫就逃跑。下面是完整的例子:
//定义一个委托,用来关联的Cry事件处理方法
public delegate void CryEventHandler();
//Cat类是事件的生成者,通过OnCry()方法引发Cry事件
//但Cat类并不知道谁会监听Cry事件,以及如何理Cry事件,它只是告诉环境Cry事件发生了
//通俗的解释是:猫叫了,但猫并不知道它的叫声对环境有什么影响
public class Cat
//Mouse类是事件的订阅者,定义了Cry事件发生时的处理方法Run()
//通俗的解释是:老鼠在夜间行动时,时刻都在堤防着猫,如果听到猫叫声马上离开
public class Mouse
public class Demo1
//假定有两种猫:一种是笨猫,它更本就追不上老鼠,所以老鼠即使听到它的叫声也不会逃走,对它描述为aBenCat;
//另一种猫就是能抓老鼠的猫了,老鼠闻风丧胆,对它描述为smartCat
//定义一个委托,用来关联的Cry事件处理方法
public delegate void CryEventHandler(object sender,CryEventArgs e);
//继承EventArgs类,负责在事件发送器和订阅者之间传递事件的信息
public class CryEventArgs : EventArgs
//Cat类是事件的生成者,通过OnCry()方法引发Cry事件
//但Cat类并不知道谁会监听Cry事件,以及如何理Cry事件,它只是告诉环境Cry事件发生了
//通俗的解释是:猫叫了,但猫并不知道它的叫声对环境有什么影响
public class Cat
//Mouse类是事件的订阅者,定义了Cry事件发生时的处理方法Run()
//通俗的解释是:老鼠在夜间行动时,时刻都在堤防着猫,如果听到猫叫声马上离开
public class Mouse
public class Demo2
//定义一个委托
public delegate void EventHandler(object sender, EventArgs e);
//Button类实现,省略了与Click事件无关的代码
public class Button : WebControl, IButtonControl, IPostBackEventHandler
{
{
{
{
{
{
{
{
{
this.Page.Validate(this.ValidationGroup);
}
//EventArgs.Empty表示没有事件数据的事件,等同于EventArgs类的构造函数
this.OnClick(EventArgs.Empty);
}
}
参考资料:理解C#中的委托和事件,委托与事件 ,[翻译]简单谈谈事件与委托
(MSDN)A delegate declaration defines a reference type that can be used to encapsulate a method with a specific signature.A delegate instance encapsulates a static or an instance method.Delegates are roughly similar to function pointers in C++;however,delegates are type-safe and secure.
委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。
我们可以这样理解委托:委托是函数的封装,它代表一“类”函数,它们都符合一定的签名:拥有相同的参数列表、返回值类型。同时,委托也可以看成是对函数的抽象,是函数的类,此时的实例代表一个具体的函数。
2.事件的理解:
C#使用委托模型来实现事件。事件生成者类中不用定义事件的处理方法;事件订阅者是那些希望在事件发生时得到通知的对象,它们定义将和事件委托关联的事件处理方法。当生成事件时,事件生成者通过调用事件委托“触发”事件,然后委托调用和它关联的事件处理方法。
3.猫和老鼠的例子
首先,我们设定一个简单场景来说明,夜深人静,屋里有老鼠蹑手蹑脚的行动,且随时提防着猫,如果听到猫叫,老鼠闻声立即逃回洞里。这个场景可以抽象为事件的几个要素:
猫和老鼠是两个对象,猫是事件生成者对象,猫叫是一个方法,引发Cry事件;老鼠是事件订阅者对象,它提供事件处理程序Run()方法;通过委托和事件实现了老鼠对猫动静的监听,结果是老鼠听到猫叫就逃跑。下面是完整的例子:
//定义一个委托,用来关联的Cry事件处理方法
public delegate void CryEventHandler();
//Cat类是事件的生成者,通过OnCry()方法引发Cry事件
//但Cat类并不知道谁会监听Cry事件,以及如何理Cry事件,它只是告诉环境Cry事件发生了
//通俗的解释是:猫叫了,但猫并不知道它的叫声对环境有什么影响
public class Cat
//Mouse类是事件的订阅者,定义了Cry事件发生时的处理方法Run()
//通俗的解释是:老鼠在夜间行动时,时刻都在堤防着猫,如果听到猫叫声马上离开
public class Mouse
public class Demo1
//假定有两种猫:一种是笨猫,它更本就追不上老鼠,所以老鼠即使听到它的叫声也不会逃走,对它描述为aBenCat;
//另一种猫就是能抓老鼠的猫了,老鼠闻风丧胆,对它描述为smartCat
//定义一个委托,用来关联的Cry事件处理方法
public delegate void CryEventHandler(object sender,CryEventArgs e);
//继承EventArgs类,负责在事件发送器和订阅者之间传递事件的信息
public class CryEventArgs : EventArgs
//Cat类是事件的生成者,通过OnCry()方法引发Cry事件
//但Cat类并不知道谁会监听Cry事件,以及如何理Cry事件,它只是告诉环境Cry事件发生了
//通俗的解释是:猫叫了,但猫并不知道它的叫声对环境有什么影响
public class Cat
//Mouse类是事件的订阅者,定义了Cry事件发生时的处理方法Run()
//通俗的解释是:老鼠在夜间行动时,时刻都在堤防着猫,如果听到猫叫声马上离开
public class Mouse
public class Demo2
//定义一个委托
public delegate void EventHandler(object sender, EventArgs e);
//Button类实现,省略了与Click事件无关的代码
public class Button : WebControl, IButtonControl, IPostBackEventHandler
{
{
{
{
{
{
{
{
{
this.Page.Validate(this.ValidationGroup);
}
//EventArgs.Empty表示没有事件数据的事件,等同于EventArgs类的构造函数
this.OnClick(EventArgs.Empty);
}
}
参考资料:理解C#中的委托和事件,委托与事件 ,[翻译]简单谈谈事件与委托
相关文章推荐
- 猫和老鼠的故事来理解委托和事件
- 委托和事件:从猫和老鼠的故事看事件
- 委托与事件的故事(For c++ developer)
- 委托和事件— 一个虚构的故事
- 由"猫,老鼠和主人"引出的委托,事件…
- 对张子阳先生对委托和事件的两篇文章的读后思考(说得很透,内附故事一篇)
- [C#]猫叫人醒老鼠跑 C#的委托及事件
- C#例子 易懂故事 接口 委托 事件 异步通知 好玩.
- [C#]猫叫人醒老鼠跑 C#的委托及事件
- c#中的委托与事件(故事)
- 一道事件委托面试题 - 猫叫老鼠跑主人醒
- c#事件,委托机制 这个例子非常好哦.提供源码,.一下子就了解了,还推荐去看 皮特的故事 要学委托 事件的话,
- Unity之C#——委托与事件,观察者模式,猫和老鼠事例
- 关于C#/.NET中委托和事件的机制和应用的故事(转)
- jQuery事件委托( bind() \ live() \ delegate()) [委托 和 绑定的故事]
- 猫和老鼠的委托和事件翻改(JS)
- C#的委托及事件 猫叫人醒老鼠跑
- C# 委托与事件的故事
- 猫叫人醒老鼠跑 C#的委托及事件