0

类层次结构和代码如下: 以及如何调用 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()
        {

        }
    }
}
4

2 回答 2

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

如果您查看该类,很明显从外部您将无法找出有哪些处理程序。仅仅因为您声明了一个类似字段的事件并不能让外界访问您的字段。

当然,如果需要,您可以显式公开处理程序 - 但这并不是一个好主意。

有关更多信息,请参阅我关于事件和代表的文章。

于 2012-10-15T06:27:47.177 回答
0

至少在 VB 中,委托可用作Private <EventName>Event,因此您可以AddedEvent.GetInvocationList直接从类内部检索,或使用外部反射。

于 2012-10-18T03:02:12.850 回答