博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET自定义事件小结
阅读量:5159 次
发布时间:2019-06-13

本文共 4006 字,大约阅读时间需要 13 分钟。

最近因为工作的事情想了很多,此处略去三千字吧。。。

还是把事件这个技术拿过来沉淀一下,继续学习,继续提高自己,好吧,废话不多说,进入正题吧~

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

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

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

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();        }    }}

程序运行结果如下:

例子很简单,我是按照顺序写的,在代码中也有详细的步骤注释,就不多讲了。一般经验来讲,自定义的东西往往是很有用的,而往往也不是人人能够掌握,DebugLZQ总结了一下,也没有什么高端的技术,遇到了自定义事件的这个事情,写下来吧,心里也就不虚了~具体流程可能一千个人一千个哈姆雷特,看个人习惯~

本文自定义的CLR事件,关于自定义WPF的路由事件请参考:

接下来英语口语要注意锻炼,技术要继续学习(重点是加强LINQ,WCF,WPF以及敏捷开发方面的知识),努力提高自己的专业素质,在此期间完成毕业论文。

时间又是很晚了~手指在键盘上流浪至天明吧~多么美丽的夜晚---So Beautiful ! 

=====================================================

Update:

我们可以使用.NET提供的来简化,事件的定义及使用,提高开发效率和代码质量~

如下(区别在步骤2和4,省略了1):

using System;namespace RefactorCustomizeEventDemo{    //http://www.cnblogs.com/DebugLZQ    //自定义事件步骤的示例代码    //0.定义事件传递的参数    class AlarmEventArgs : EventArgs    {        public int numberOfThief;        public AlarmEventArgs(int n)        {            numberOfThief = n;        }    }    //事件的发出者    class Dog    {        //2.声明事件        public event EventHandler
Alarm; //3.引发事件的函数 public void OnAlarm(AlarmEventArgs e) { if (Alarm != null) { Console.WriteLine("The dog is Wangwang..."); Alarm(this, e); } } } //事件的订阅者 class Host { //4.订阅事件 public Host(Dog dog) { // dog.Alarm += new EventHandler
(HostHandleEvent); // this line is equal to the next line dog.Alarm += 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(); } }}

 

步骤2:申明事件的最佳实践如下:

//2.声明事件public event EventHandler
Alarm= delegate { };

程序运行如下:

 

Update:

请参考DebugLZQ后续博文:

 

希望对你有帮助~

转载于:https://www.cnblogs.com/DebugLZQ/archive/2012/11/04/2753076.html

你可能感兴趣的文章
面试整理:Python基础
查看>>
Python核心编程——多线程threading和队列
查看>>
Program exited with code **** 相关解释
查看>>
植物大战僵尸中文年度版
查看>>
26、linux 几个C函数,nanosleep,lstat,unlink
查看>>
投标项目的脚本练习2
查看>>
201521123107 《Java程序设计》第9周学习总结
查看>>
Caroline--chochukmo
查看>>
iOS之文本属性Attributes的使用
查看>>
从.Net版本演变看String和StringBuilder性能之争
查看>>
Excel操作 Microsoft.Office.Interop.Excel.dll的使用
查看>>
解决Ubuntu下博通网卡驱动问题
查看>>
【bzoj2788】Festival
查看>>
执行gem install dryrun错误
查看>>
HTML5简单入门系列(四)
查看>>
实现字符串反转
查看>>
转载:《TypeScript 中文入门教程》 5、命名空间和模块
查看>>
苹果开发中常用英语单词
查看>>
[USACO 1.4.3]等差数列
查看>>
Shader Overview
查看>>