当前位置: 首页 > news >正文

数据字典存储事件实例

      当有很多事件,大多数事件不会实现时,可以使用字典存储事件实例,这也是事件选择器的典型用法。

    public delegate void EventHandler1(int i);
    public delegate void EventHandler2(string s);

    public class PropertyEvent
    {
        Dictionary<string, System.Delegate> eventTable;

        public PropertyEvent()
        {
            eventTable = new Dictionary<string, Delegate>();
            eventTable.Add("Event1", null);
            eventTable.Add("Event2", null);
        }

        public event EventHandler1 Event1
        {
            add
            {
                lock (eventTable)
                {
                    eventTable["Event1"] = (EventHandler1)eventTable["Event1"] + value;
                }
            }
            remove
            {
                lock (eventTable)
                {
                    eventTable["Event1"] = (EventHandler1)eventTable["Event1"] - value;
                }
            }
        }

        public event EventHandler2 Event2
        {
            add
            {
                lock (eventTable)
                {
                    eventTable["Event2"] = (EventHandler2)eventTable["Event2"] + value;
                }
            }
            remove
            {
                lock (eventTable)
                {
                    eventTable["Event2"] = (EventHandler2)eventTable["Event2"] - value;
                }
            }
        }

        public void RaiseEvent1(int i)
        {
            EventHandler1 handler1 = (EventHandler1)eventTable["Event1"];
            if (handler1 != null)
                handler1(i);
        }

        public void RaiseEvent2(string s)
        {
            EventHandler2 handler2 = (EventHandler2)eventTable["Event2"];
            if (handler2 != null)
                handler2(s);
        }
    }

    class DictionaryEvent
    {
        public static void DelegateMethod1(int i)
        {
            Console.WriteLine(i.ToString());
        }
        public static void DelegateMethod2(string s)
        {
            Console.WriteLine(s);
        }
        public static void Main(string[] args)
        {
            PropertyEvent p = new PropertyEvent();

            p.Event1 += DictionaryEvent.DelegateMethod1;
            p.Event1 += DictionaryEvent.DelegateMethod1;
            p.Event1 += DictionaryEvent.DelegateMethod1;
            p.Event1 -= DictionaryEvent.DelegateMethod1;
            p.RaiseEvent1(1);

            p.Event2 += DictionaryEvent.DelegateMethod2;
            p.Event2 += DictionaryEvent.DelegateMethod2;
            p.Event2 += DictionaryEvent.DelegateMethod2;
            p.Event2 -= DictionaryEvent.DelegateMethod2;
            p.RaiseEvent2("Test");

            Console.Read();
        }
    }

输出如下:

转载于:https://www.cnblogs.com/wanghonghu/archive/2012/06/25/2562872.html

相关文章:

  • [转]MYSQL常用命令
  • Windows 下硬盘安装 fedora(Live CD)
  • SQL几个常用函数略解
  • b/s结构和c/s结构
  • IBM x3650 m3 raid0
  • Linux内核中的双向循环链表学习
  • .net中生成excel后调整宽度
  • maven 自动生成运行脚本插件appassembler-maven-plugin
  • Spring配置数据源的三种方式
  • 数据库的四种类型的完整性约束
  • 由struct 和class 想到的浅度复制和深度复制 c#
  • 深入理解C#之 参数传递 ref out params
  • Spring表单校验解析
  • flex 学习笔记 动态改变 样式文件
  • CLI配置和编址
  • 【技术性】Search知识
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Angular 4.x 动态创建组件
  • CSS 专业技巧
  • Fastjson的基本使用方法大全
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Meteor的表单提交:Form
  • Solarized Scheme
  • web标准化(下)
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 关于Java中分层中遇到的一些问题
  • 解析 Webpack中import、require、按需加载的执行过程
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 前嗅ForeSpider采集配置界面介绍
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何用vue打造一个移动端音乐播放器
  • 思考 CSS 架构
  • 跳前端坑前,先看看这个!!
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 移动端解决方案学习记录
  • 由插件封装引出的一丢丢思考
  • 字符串匹配基础上
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 从如何停掉 Promise 链说起
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # 数论-逆元
  • #Linux(帮助手册)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (arch)linux 转换文件编码格式
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (定时器/计数器)中断系统(详解与使用)
  • (剑指Offer)面试题34:丑数
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (图)IntelliTrace Tools 跟踪云端程序
  • (转) 深度模型优化性能 调参
  • .bat批处理(一):@echo off