首页 > 代码库 > 4.事件篇

4.事件篇

namespace ConsoleApplication2{    class Program    {        private static void student_registerFinish()        {            Console.WriteLine("注册成功");        }        static void Main(string[] args)        {            string stuName = Console.ReadLine();            Student stu = new Student(stuName);            //订阅student类的RegisterFinish            stu.RegisterFinish += new Student.DelegateRegisterFinishEventHandler(student_registerFinish);            stu.Register();//事件发生时通知事件订阅者        }    }    class Student    {        public delegate void DelegateRegisterFinishEventHandler();//定义委托        public event DelegateRegisterFinishEventHandler RegisterFinish; //通过委托定义事件        private string name;        public Student(string name)        {            this.name = name;        }        public void Register()        {            Console.WriteLine("学生{0}进行注册",name);            if (RegisterFinish != null)            {                RegisterFinish();//引发事件            }        }    }}

 

1.事件与委托的关系

事件是特殊化的委托,委托是事件的基础;

2.理解

事件是对象发送的消息,发送信号通知客户发生了操作。这个操作可能是由鼠标单击引起的,也可能是由某些其他的程序逻辑触发的。事件的发送方不需要知道那个对象或者方法接收它引发的事件,发送方只需知道在它和接收方之间存在的中介(Deletgate)

3.定义事件
//定义事件之前需要定义委托
public delegate void DelegateEventHandler();
//定义一个事件
private event DelegateEventHandler EventMe;

4.订阅事件   指是为了添加一个委托,事件引发时该委托将调用一个方法。事件存在时为对象订阅事件。

EventMe += new DelegateEventHandler(//需要引用的方法); //该引用的方法就是订阅了该事件

5.引发事件 指要通知订阅某个事件的所有对象,需要引发该事件。引发事件与调用方法相似。

EventMe();  //引发该事件

6.特点

a.一个事件可以订阅多个订阅者。
b.发行者确定何时引发事件,订阅者确定执行何种操作来响应该事件
c.没有订阅者事件永远都不会被调用
d.事件通常用于通知操作

 

4.事件篇