南京北大青鸟

全国免费电话:400-885-5191

三分钟了解北大青鸟
当前位置:北大青鸟 > 学习园地 > 编程技巧

.NET自定义事件小结

来源:南京北大青鸟张府园校区      作者:中博IT教育      发布时间:2012-11-06 17:04:24

关于事件各位应该都不陌生,相信每个程序员都可以拍着胸脯说“事件?我知道啊~”,可如何自定义事件?也许有人心中就不是那么底气十足了。

关于事件各位应该都不陌生,相信每个程序员都可以拍着胸脯说“事件?我知道啊~”,可如何自定义事件?也许有人心中就不是那么底气十足了。还是老规矩吧,高手绕行~

用很多地方都被引用到泛滥的一个例子来写吧,始作俑者就不去深究了。描述是这样的:小偷进入时,事件发送者(猫)发送猫叫事件(自定义),(事件接收者)主人订阅猫叫事件并处理(抓住小偷),事件的参数传递的是小偷的数量。

下面就给出实现的具体步骤---已经在代码注释中标明,以供各位博友抽象出自定义事件的流程。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 自定义事件
{
    //http://www.cnblogs.com/DebugLZQ
    //自定义事件步骤的示例代码

    //0.定义事件传递的参数
    class AlarmEventArgs : EventArgs
    {
        public  int numberOfThief;
        public AlarmEventArgs(int n)
        {
            numberOfThief = n;
        }
    }
    //事件的发出者
    class Dog
    {
        //1.声明事件的委托
        public delegate void AlarmEventHandler(Object sender, AlarmEventArgs e);
        //2.声明事件
        public event AlarmEventHandler Alarm;
        //3.引发事件的函数
        public void OnAlarm(AlarmEventArgs e)
        {
            if (this.Alarm != null)
            {
                Console.WriteLine("The dog is Wangwang...");
                this.Alarm(this, e);               
            }
        }
    }
    //事件的订阅者
    class Host
    {
        //4.订阅事件
        public Host(Dog dog)
        {
            dog.Alarm += new Dog.AlarmEventHandler(HostHandleEvent);
        }
        //5.事件处理程序
        public void HostHandleEvent(Object sender, AlarmEventArgs e)
        {
            Console.WriteLine("Host caught the thief! The sum is "+e.numberOfThief);
        }
    }
   
    class Program
    {
        static void Main(string[] args)
        {
           
            Console.WriteLine("Program is running...");

            Dog dog = new Dog();
            Host host = new Host(dog);

            Console.WriteLine("Someone is coming...");
            //6.在合适的时候引发事件
            AlarmEventArgs alarmEventArgs = new AlarmEventArgs(3);
            dog.OnAlarm(alarmEventArgs);

            Console.ReadKey();
        }
    }
}

程序运行结果如下:

例子很简单,我是按照顺序写的,在代码中也有详细的步骤注释,就不多讲了。一般经验来讲,自定义的东西往往是很有用的,而往往也不是人人能够掌握。

(责任编辑:南京北大青鸟)

分享到:

抢免费试听名额

名额仅剩66名

教育改变生活

WE CHANGE LIVES