在C#中,可以使用 GetInvocationList()
方法来获取事件已经注册了哪些方法。该方法返回一个Delegate
类型的数组,包含了所有已注册的方法。
下面是一个示例代码:
cs
using System;
class Program
{
static void Main(string[] args)
{
MyEventClass myEventClass = new MyEventClass();
myEventClass.MyEvent += Method1;
myEventClass.MyEvent += Method2;
// 事件"MyEventClass.MyEvent"只能出现在 += 或 -= 的左边(从类型"MyEventClass"中使用时除外)
Delegate[] eventHandlers = myEventClass.MyEvent.GetInvocationList();
// 所以,只能在声明事件的类里定义一个函数来获取
Delegate[] eventHandlers = myEventClass.GetEventDelegates();
foreach (Delegate handler in eventHandlers)
{
Console.WriteLine(handler.Method.Name);
}
}
static void Method1()
{
Console.WriteLine("Method1");
}
static void Method2()
{
Console.WriteLine("Method2");
}
}
class MyEventClass
{
public event Action MyEvent;
public Delegate[] GetEventDelegates()
{
return MyEvent.GetInvocationList();
}
}
输出结果为:
Method1
Method2
在上面的示例中,MyEventClass
类定义了一个MyEvent
事件,类型为Action
。在Main
方法中,我们将Method1
和Method2
方法注册到了MyEvent
事件中。然后,我们使用GetInvocationList()
方法获取已注册的方法,并逐个打印出它们的名称。