如何在以下代码中调用GetInvocationList()?

时间:2012-10-15 06:16:18

标签: c# .net vb.net

类层次结构和代码如下所示: 以及如何调用GetInvocationList()来查看Main函数中已添加授权的绑定了多少函数?

namespace Test
{
    public class Program
    {
        public class SelectSet
        {
            public event SelectSet.AddedEventHandler Added;
            public delegate void AddedEventHandler(object BusinessObject);
        }

        public class C1
        {
            public static SelectSet SelectSet;
        }

        static void Main()
        {

        }
    }
}

2 个答案:

答案 0 :(得分:1)

  

如何调用GetInvocationList()来查看在Main函数中绑定了多少个函数?

你不能(至少没有反思),你不应该。暴露事件的目的是仅公开添加或删除处理程序的功能。所以这有点像你的代码是这样编写的:

public class SelectSet
{
    // Private fields here

    public void AddAddedHandler(SelectSet.AddedEventHandler handler)
    {
        // Implement using private fields
    }

    public void RemoveAddedHandler(SelectSet.AddedEventHandler handler)
    {
        // Implement using private fields
    }

    public delegate void AddedEventHandler(object BusinessObject);
}

如果你看那个类,很明显从外面你将无法找到那些处理程序。仅仅因为你宣布一个类似场地的事件并没有让外界进入你的领域。

当然,您可以明确地公开处理程序 - 但这很少是一个好主意。

有关详细信息,请参阅我的article on events and delegates

答案 1 :(得分:0)

至少在VB中,代理人可以Private <EventName>Event使用,因此您可以直接从课程中检索AddedEvent.GetInvocationList,也可以使用外部的反射。