C#事件:介绍委托和事件
分别介绍:
1:事件是特殊化的委托,委托是事件的基础。
委托:使用委托可以将方法应用(不是方法)封装在委托对象内,然后将委托对象 传递给调用方法的代码,这样编译的时候代码就没有必要知道调用哪个方法。通过 使用委托程序能够在运行时动态的调用不供的方法。
C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。
委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。
事件:事件是对象发送的消息,发送信号通知客户发生了操作。这个操作可能是由 鼠标单击引起的,也可能是由某些其他的程序逻辑触发的。事件的发送方不需要知 道那个对象或者方法接收它引发的事件,发送方只需知道在它和接收方之间存在的 中介(Deletgate)
2:在GUI图形界面中的事件(单击按钮或者选择菜单等)是已经定义好的事件,所需要 的就是注册事件。我们也可以自己定义声明事件,可以将自己定义的事件应用到程 序的任何地方。事件和委托是分不开的,c# 中使用委托来声明事件。 如果在类里面声明事件,那么必须先声明该事件的委托类型,也可以使用一个事先 已经声明好的委托类型
using System; namespace SimpleEvent { using System; public class EventTest { private int value; public delegate void NumManipulationHandler(); //委托 public event NumManipulationHandler ChangeNum; //由委托定义事件 protected virtual void OnNumChanged() { if (ChangeNum != null) { ChangeNum(); } else { Console.WriteLine("Event fired!"); } } public EventTest(int n ) { SetValue(n); } public void SetValue(int n) { if (value != n) { value = n; OnNumChanged(); } } } public class MainClass { public static void Main() { EventTest e = new EventTest(5); e.SetValue(7); e.SetValue(11); Console.ReadKey(); } } }
结果:
Event Fired! Event Fired! Event Fired!