黑马程序员_事件
来源:互联网 发布:不可抗力网络剧百度云 编辑:程序博客网 时间:2024/05/22 15:52
“----------ASP.Net+Android+IOS开发、Net培训、期待与您交流!----------”
事件是类在发生其关注的事情时用来通知的一种方式,例如:封装用户界面的类可以定义一个在用户单击该控件时发生的事件,控件类不关心单击按钮时发生了什么
但它需要告知派生类单击事件已经发生.然后,派生类可选择如何响应
事件发行者(Publisher):
一个事件发行者,也称作发送者(sender),其实就是一个对象,这个对象会自行维护本身的状态信息,当本身状态信息发生变动时,便触发一个事件
并通知所有事件订阅者
事件订阅者(Subscriber):
对事件感兴趣的对象,也称为接收者(Receiver),可以注册感兴趣的事件,通常需提供一个事件处理程序,在事件发行者触发一个事件后,会自动执行这段代码的内容
事件的四个步骤:
1.在事件发行者中定义一个事件
2.在事件发行者中触发事件
3.在事件订阅者中定义事件处理程序
4.向事件发行者中订阅一个事件
class ClassEvent { static void Main(string[] args) { Publisher publisher = new Publisher(); Subscriber zs = new Subscriber("张三"); publisher.onPubComputer += new Publisher.PubComputer(zs.Receive);//向事件发行者订阅一个事件(委托类型是静态方法,事件是实例方法) Subscriber ls = new Subscriber("李四"); publisher.onPubComputer += new Publisher.PubComputer(ls.Receive); publisher.onPubLife += new Publisher.PubLife(ls.Receive); publisher.IssueComputer();//触发事件 publisher.IssueLife(); Console.WriteLine(); Console.WriteLine("一年后,李四取消了对《电脑》杂志的订阅"); Console.WriteLine(); publisher.onPubComputer -= new Publisher.PubComputer(ls.Receive); publisher.IssueComputer();//触发事件 publisher.IssueLife(); Console.ReadLine(); } } //出版社现在出版两本杂志(电脑,生活) class Publisher //出版社 { public delegate void PubComputer(string magazineName); //声明事件所需的代理(个人理解:事件订阅者方法类型(无参无返回值)) public delegate void PubLife(string magazineName); public event PubComputer onPubComputer; //事件的声明(事件无返回值,若有,就失去了意义(+=)) public event PubLife onPubLife; public void IssueComputer() { //触发事件的方法 if (onPubComputer != null) { Console.WriteLine("出版社发行《电脑》杂志"); onPubComputer("电脑杂志"); } } public void IssueLife() { //触发事件的方法 if (onPubLife != null) { Console.WriteLine("出版社发行《生活》杂志"); onPubLife("生活杂志"); } } } class Subscriber //订阅者 { private string name; public Subscriber(string name) { this.name = name; } public void Receive(string magazineName) { //在事件订阅者中定义事件处理程序(与发行者中声明的委托类型一致) Console.WriteLine(this.name + "已经收到" + magazineName); } }
- 黑马程序员_事件
- 黑马程序员_事件
- 黑马程序员_事件
- 黑马程序员_委托和事件
- 黑马程序员_事件、反射、网络相关知识总结
- 黑马程序员_枚举
- 黑马程序员_多线程
- 黑马程序员_反射
- 黑马程序员_泛型
- 黑马程序员_注解
- 黑马程序员_注解
- 黑马程序员_泛型
- 黑马程序员_代理
- 黑马程序员_继承
- 黑马程序员_多态
- 黑马程序员_线程
- 黑马程序员_泛型
- 黑马程序员_反射
- Chapter09-"内核模式下的线程同步"之等待函数
- 几道水博弈
- POJ 2152(树形DP)
- 未能找到类型或命名空间名称“XXXX”(是否缺少 using 指令或程序集引用?)
- 阻止局域网中的ARP攻击
- 黑马程序员_事件
- XML简明教程(4)
- ubuntu 安装
- 【字典树】 hdu1251 统计难题
- POJ 2417 Discrete Logging (baby_step,giant_step算法)
- [Situated Learning] VirtualBox上运行的Fedora17环境下配置standalone HBase instance
- Ubuntu “无法获得锁”解决方案(E: 无法获得锁 /var/cache/apt/archives/lock – open (11 资源临时不可用)
- NDK配置环境出现的常见问题
- linux系统信息查询