数据字典存储事件实例

本文介绍了一种使用字典来存储事件实例的方法,并通过一个具体的.NET示例演示了如何定义事件处理器、事件触发器以及如何注册和取消注册事件监听器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

输出如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值