C#事件
2015-08-24 02:04
567 查看
C#事件
using System; using System.Collections.Generic; using System.Linq; using System.Text; /* 事件概述 事件具有以下特点: 发行者确定何时引发事件,订户确定执行何种操作来响应该事件。 一个事件可以有多个订户。 一个订户可处理来自多个发行者的多个事件。 没有订户的事件永远也不会引发。 事件通常用于通知用户操作,例如,图形用户界面中的按钮单击或菜单选择操作。 如果一个事件有多个订户,当引发该事件时,会同步调用多个事件处理程序。 要异步调用事件,请参见使用异步方式调用同步方法。 在 .NET Framework 类库中,事件是基于 EventHandler 委托和 EventArgs 基类的。 */ namespace myevent { class Change : EventArgs //触发事件的条件 { public Change(string tmp) { Console.WriteLine(tmp); //发出信号 } } class Event { //原先的写法 //public delegate void EventHand(object one, Change two); //public event EventHand Ourevent; //简洁的写法 EventHandler是系统定义的一个泛型委托 public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e); public event EventHandler<Change> Ourevent; //声明事件 public void check(Change tmp) //事件检查方法 { if(Ourevent != null) //如果有订阅者,则进行告知 { Console.WriteLine("激发事件..."); this.Ourevent(this, tmp); } } } class UserOne { public void getevent(Event oneevent) //订阅事件 { oneevent.Ourevent += deal; } public void deal(object one, Change two) //事件处理方法,每个订阅者都有自己的解决方法 { Console.WriteLine("事件1已经解决."); } } class UserTwo { public void getevent(Event twoevent) { twoevent.Ourevent += deal; } public void deal(object one, Change two) { Console.WriteLine("事件2已经解决."); } } class UserThree { public void getevent(Event threeevent) { threeevent.Ourevent += deal; } public void deal(object one, Change two) { Console.WriteLine("事件3已经解决."); } } class MyMain { static void Main() { Event standard = new Event(); //发布事件 UserOne one = new UserOne(); one.getevent(standard); //订阅事件 UserTwo two = new UserTwo(); two.getevent(standard); UserThree three = new UserThree(); three.getevent(standard); Change change = new Change("计划有变"); //触发事件 standard.check(change); Console.ReadKey(); } } }
相关文章推荐
- 编写高质量代码改善C#程序的157个建议——建议148:不重复代码
- 编写高质量代码改善C#程序的157个建议——建议147:重构多个相关属性为一个类
- 编写高质量代码改善C#程序的157个建议——建议146:只对外公布必要的操作
- 编写高质量代码改善C#程序的157个建议——建议145:避免过长的方法和过长的类
- 编写高质量代码改善C#程序的157个建议——建议144:一个方法只做一件事
- c# 实现类似skynet的核心库
- c#读取Execl表格数据
- 编写高质量代码改善C#程序的157个建议——建议143:方法抽象级别应在同一层次
- C# String.Format字符串中包含"{" "}"时需注意的问题
- C#使用DirectShow实现简单的视频播放
- 编写高质量代码改善C#程序的157个建议——建议142:总是提供有意义的命名
- 【C#】事务
- c# Socket 开发小记
- C#基础------方法
- C# 之 FTP服务器中文件上传与下载(二)
- 编写高质量代码改善C#程序的157个建议——建议141:不知道该不该用大括号时,就用
- 编写高质量代码改善C#程序的157个建议——建议140:使用默认的访问修饰符
- 编写高质量代码改善C#程序的157个建议——建议139:事件处理器命名采用组合方式
- 编写高质量代码改善C#程序的157个建议——建议138:事件和委托变量使用动词或形容词短语命名
- 编写高质量代码改善C#程序的157个建议——建议137:委托和事件类型应添加上级后缀