第九章(4)-事件访问器-学习笔记
来源:互联网 发布:linux mv命令 编辑:程序博客网 时间:2024/06/05 23:06
在真实的项目中,有的对象有相当多的事件,例如一个窗体就有好多种事件。默认情况下,当声明事件时,编译器将内存分配给一个事件字段,一存储事件信息。如果类中有好多事件未使用,则他们会不必要的占用内存。
这种情况下,.NETFramework提供了EventHandlerList类来减少内存的占用。它可以被看作事件的集合,只有需要响应的事件才拥有方法调用列表,才会在EventHandlerList对象中出现。
如果用EventHandlerList对象来保存事件的相应方法,必须为每一个事件编写特殊的访问器:
public delegate void OneDelegate(int value); public class A { public EventHandlerList events = new EventHandlerList(); public event OneDelegate One { add { events.AddHandler("One",value); } remove { events.RemoveHandler("One",value); } } }
这样事件就不像原先的字段,而是变成了类中的属性,而“add”“remove”就相当于“get”“set”。
激发事件时,原先的“标准”编写方法是:
事件(参数);
但是对于定义了事件访问器的事件,则必须按以下格式激发事件:
(EventHandlerList对象名[事件名] as定义事件的委托类型)(参数);
例如:
(events["One"] as OneDelegate)(100);完整示例:
using System;using System.Collections.Generic;using System.Text;using System.ComponentModel;namespace UseEventListExample{ public delegate void OneDelegate(int value); public delegate void TwoDelegate(String str); public class A { private EventHandlerList events = new EventHandlerList(); public event OneDelegate Event1 { add { events.AddHandler("Event1", value); } remove { events.RemoveHandler("Event1", value); } } public event TwoDelegate Event2 { add { events.AddHandler("Event2", value); } remove { events.RemoveHandler("Event2", value); } } public void FireTwoEvents() { //对于事件访问器,不能直接这样激发事件 //Event1(100); //Event2("100"); (events["Event1"] as OneDelegate)(100); (events["Event2"] as TwoDelegate)("100"); } } public class B { public void f1(int i) { Console.WriteLine("B.f1(int)"); } public void f2(String str) { Console.WriteLine("B.f2(String)"); } } class Program { static void Main(string[] args) { B b = new B(); A a = new A(); a.Event1 += b.f1; a.Event2 += b.f2; a.FireTwoEvents(); Console.ReadKey(); } }}
0 0
- 第九章(4)-事件访问器-学习笔记
- 第九章(1)-事件处理机制-学习笔记
- 第九章(2)-定义自己的事件-学习笔记
- 第九章(3)-开发拥有自定义事件的控件-学习笔记
- (WPF学习记录)第九章 Routed输入事件
- Android学习笔记 第九章
- APUE学习笔记(第九章)
- 【学习笔记】第九章 接口
- python学习笔记 第九章
- opencv视频学习第九课(访问cvMat数据)笔记整理
- 第九章(笔记)
- 《机器学习》--周志华 (第九章学习笔记)
- 第九章 简历复印-原型模式(学习笔记)
- c++primer学习笔记 ( 第九章 顺序容器)
- 《python编程入门经典》学习笔记第九章(一)
- 《深入java虚拟机》学习笔记(第九章 垃圾收集)
- 编程珠玑(2)第九章学习笔记
- apue学习笔记(第九章 进程关系)
- 关于 x &= (x – 1) -c 言语学习笔记之一
- C 回调函数
- 简单扑克牌游戏
- Bootstrap的aria-label和aria-labelledby
- 斯坦福机器学习课程笔记week4&5-神经网络
- 第九章(4)-事件访问器-学习笔记
- java21.IO操作------FileReader与FileWriter
- 微支付jsapi巨坑 微支付 jsapi java
- 欢迎使用CSDN-markdown编辑器
- hdoj5090Game with Pearls【二分图最大匹配】
- Hadoop异常:Bad connect ack with firstBadLink
- I just want to be a quiet programmer.
- Nim Game
- Lua脚本语言入门