C# 如何获取事件已经注册了哪些方法

在C#中,可以使用 GetInvocationList() 方法来获取事件已经注册了哪些方法。该方法返回一个Delegate类型的数组,包含了所有已注册的方法。

下面是一个示例代码:

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方法中,我们将Method1Method2方法注册到了MyEvent事件中。然后,我们使用GetInvocationList()方法获取已注册的方法,并逐个打印出它们的名称。

你可能感兴趣的:(c#,开发语言)