事件就是当对象或类状态发生改变时,对象或类发出的信息或通知。发出信息的对象或类称为"事件源",对事件进行处理的方法称为"接收者",通常事件源在发出状态改变信息时,它并不知道由哪个事件接收者来处理.这就需要一种管理机制来协调事件源和接收者,C++中通过函数指针来完成的.在C#中事件使用委托来为触发时将调用的方法提供类型安全的封装
事件的声明
1.声明一个委托
public delegate void EventHandler(object sender, System.EventArgs e);
2.声明一个事件
public event EventHandler Changed;
3.引发一个事件
public OnChanged(EnventArgs e)
{
if ( Changed != null)
{
Changed(this,e);
}
}
4.定义事件处理程序
public MyText_OnChanged(Object sender,EventArgs e)
{
...
}
5.订阅事件(将事件处理程序添加到事件的调用列表中)
myText.Changed += EventHandler(MyText_OnChanged);
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace 事件的委托
- {
- class Program
- {
- static void Main(string[] args)
- {
- MyClass myClass = new MyClass();
- // 6,将事件处理程序添加到事件的调用列表中(即事件布线)
- myClass.Changed += new MyClass.ChangedEventHandler(myText_Changed);
- string str = "";
- while (str != "quit")
- {
- Console.WriteLine("please enter a string:");
- str = Console.ReadLine();
- myClass.Text = str;
- }
- }
- // 对Change事件处理的程序
- private static void myText_Changed(object sender, EventArgs e)
- {
- Console.WriteLine("text has been changed :{0}\n", ((MyClass)sender).Text);
- }
- }
- public class MyClass
- {
- //1,声明空字符传myStr;
- private string myStr = "";
- //2,定义事件的委托
- public delegate void ChangedEventHandler(object sender, EventArgs e);
- //3,定义一个事件
- public event ChangedEventHandler Changed;
- //4,触发事件
- protected virtual void OnChanged(EventArgs e)
- {
- if (this.Changed != null)
- this.Changed(this, e);
- }
- // 5,Text属性
- public string Text
- {
- get { return this.myStr; }
- set
- {
- this.myStr = value;
- // 文本改变时触发Change事件
- this.OnChanged(new EventArgs());
- }
- }
- }
- }