自定义事件(不带参数实现)

来源:互联网 发布:仙桃广电网络客服电话 编辑:程序博客网 时间:2024/04/28 21:49
class Program    {        static void Main(string[] args)        {            Dog dg = new Dog();            Host ht = new Host(dg);            DateTime now = new DateTime(2015, 8, 26, 23, 59, 40);            DateTime end = new DateTime(2015, 8, 27, 0, 0, 0);            Console.WriteLine("时间快接近深夜0时~~~~");            while (now < end)            {                Console.WriteLine(now);                Thread.Sleep(1000);                now = now.AddSeconds(1);            }            //午夜零点小偷到达,看门狗引发Alarm事件            Console.WriteLine("月黑风高的午夜: " + now);            Console.WriteLine("小偷悄悄地摸进了主人的屋内... ");            dg.OnAlarm();            Console.WriteLine("请按任何键退出~");            Console.ReadKey();        }    }    //自定一个事件参数类    class UserEventArgs : EventArgs    {        private int iEventArgs;        public UserEventArgs(int e)        {            iEventArgs = e;        }    }    class Dog    {        //1.声明关于事件的委托;        public delegate void AlarmEventHandler(object sender, EventArgs e);        //2.声明事件        public event AlarmEventHandler Alarm;        //3.编写引发事件的函数;        public void OnAlarm()        {            if (Alarm != null)            {                Console.WriteLine("汪汪~~");                Alarm(this,new EventArgs());            }        }    }    class Host    {        //主人接收到信息引发的动作        public void Catch(object sender,EventArgs e)        {            Console.WriteLine("NND小偷,别跑~");        }        public Host(Dog d)        {            d.Alarm += new Dog.AlarmEventHandler(Catch);        }    }

要创建一个事件驱动的程序需要下面的步骤:

1.         声明关于事件的委托;

2.         声明事件;

3.         编写触发事件的函数;

4.         创建事件处理程序;

5.         注册事件处理程序;

6.         在适当的条件下触发事件。

当午夜时分小偷到达时,dog调用dog.OnAlarm()函数,从而触发Alarm事件,于是"系统"找到并执行了注册在Alarm事件中的事件处理程序HostHandleAlarm()

事件处理委托习惯上以EventHandler结尾,比如AlarmEventHandler。事件Alarm实际上是事件处理委托AlarmEventHandler的一个实例。引发事件的代码常常被编写成一个函数,.NET约定这种函数的名称为“OnEventName”,比如OnAlarm()的函数。在Host类中,我们定义了事件处理程序HostHandleAlarm(),并把它注册到dog.Alarm事件中。 

 

       事件处理程序的参数应该和事件委托相同。一般情况下,事件处理程序接受两个参数,一个是事件的发送者sender,一个是事件参数e。事件参数用于在发送者和接收者之间传递信息。

 



0 0
原创粉丝点击