zoukankan      html  css  js  c++  java
  • 数据字典存储事件实例

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

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

    输出如下:

  • 相关阅读:
    【转】Python 可视化神器-Plotly Express
    【转】5个常用的深度学习框架
    [转]numpy中的np.max 与 np.maximum区别
    Win10环境Tensorflow-GPU13.1/JupyterNotebook的安装
    [How to] 使用HBase协处理器---基本概念和regionObserver的简单实现
    [会装]Spark standalone 模式的安装
    Hadoop-MR[会用]MR程序的运行模式
    [hadoop][基本原理]zookeeper场景使用
    [hadoop][会装]HBase集群安装--基于hadoop ha模式
    [hadoop][基本原理]zookeeper简单使用
  • 原文地址:https://www.cnblogs.com/wanghonghu/p/2562872.html
Copyright © 2011-2022 走看看