类层次结构和代码如下所示: 以及如何调用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()
{
}
}
}
答案 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
,也可以使用外部的反射。