如何:使用字典存储事件实例(C# 编程指南)

 

C# 编程指南
如何:使用字典存储事件实例(C# 编程指南)
 
accessor-declarations 的一种用法是公开大量的事件但不为每个事件分配字段,而是使用字典来存储这些事件实例。这只有在具有非常多的事件、但您预计大部分事件都不会实现时才有用。
示例
C#
复制代码
public delegate void EventHandler1( int i);
public delegate void EventHandler2( string s);
 
public class PropertyEventsSample
{
    private System.Collections.Generic.Dictionary< string , System.Delegate> eventTable;
 
    public PropertyEventsSample()
    {
        eventTable = new System.Collections.Generic.Dictionary< string , System.Delegate>();
        eventTable.Add( "Event1" , null );
        eventTable.Add( "Event2" , null );
    }
 
    public event EventHandler1 Event1
    {
        add
        {
            eventTable[ "Event1" ] = (EventHandler1)eventTable[ "Event1" ] + value;
        }
        remove
        {
            eventTable[ "Event1" ] = (EventHandler1)eventTable[ "Event1" ] - value;
        }
    }
 
    public event EventHandler2 Event2
    {
        add
        {
            eventTable[ "Event2" ] = (EventHandler2)eventTable[ "Event2" ] + value;
        }
        remove
        {
            eventTable[ "Event2" ] = (EventHandler2)eventTable[ "Event2" ] - value;
        }
    }
 
    internal void RaiseEvent1( int i)
    {
        EventHandler1 handler1;
        if ( null != (handler1 = (EventHandler1)eventTable[ "Event1" ]))
        {
            handler1(i);
        }
    }
 
    internal void RaiseEvent2( string s)
    {
        EventHandler2 handler2;
        if ( null != (handler2 = (EventHandler2)eventTable[ "Event2" ]))
        {
            handler2(s);
        }
    }
}
 
public class TestClass
{
    public static void Delegate1Method( int i)
    {
        System.Console.WriteLine(i);
    }
 
    public static void Delegate2Method( string s)
    {
        System.Console.WriteLine(s);
    }
 
    static void Main()
    {
        PropertyEventsSample p = new PropertyEventsSample();
 
        p.Event1 += new EventHandler1(TestClass.Delegate1Method);
        p.Event1 += new EventHandler1(TestClass.Delegate1Method);
        p.Event1 -= new EventHandler1(TestClass.Delegate1Method);
        p.RaiseEvent1(2);
 
        p.Event2 += new EventHandler2(TestClass.Delegate2Method);
        p.Event2 += new EventHandler2(TestClass.Delegate2Method);
        p.Event2 -= new EventHandler2(TestClass.Delegate2Method);
        p.RaiseEvent2( "TestString" );
    }
}
输出
2
TestString
 
 (来源:msdn )
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值