六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 851|回复: 0

.NET自定义事件小结

[复制链接]

升级  97.67%

159

主题

159

主题

159

主题

举人

Rank: 3Rank: 3

积分
493
 楼主| 发表于 2013-1-1 22:09:04 | 显示全部楼层 |阅读模式
<div id="cnblogs_post_body">最近因为工作的事情想了很多,此处略去三千字吧。。。
还是把事件这个技术拿过来沉淀一下,继续学习,继续提高自己,好吧,废话不多说,进入正题吧~
关于事件各位应该都不陌生,相信每个程序员都可以拍着胸脯说“事件?我知道啊~”,可如何自定义事件?也许有人心中就不是那么底气十足了。还是老规矩吧,高手绕行~
用很多地方都被引用到泛滥的一个例子来写吧,始作俑者就不去深究了。描述是这样的:小偷进入时,事件发送者(狗)发送狗叫事件(自定义),(事件接收者)主人订阅狗叫事件并处理(抓住小偷),事件的参数传递的是小偷的数量。
下面就给出实现的具体步骤---已经在代码注释中标明,以供各位博友抽象出自定义事件的流程。
<div class="cnblogs_code">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();        }    }}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表