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

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

相关推荐
弱冠少年20 分钟前
websockets库使用(基于Python)
开发语言·python·numpy
长天一色21 分钟前
C语言日志类库 zlog 使用指南(第五章 配置文件)
c语言·开发语言
一般清意味……33 分钟前
快速上手C语言【上】(非常详细!!!)
c语言·开发语言
卑微求AC34 分钟前
(C语言贪吃蛇)16.贪吃蛇食物位置随机(完结撒花)
linux·c语言·开发语言·嵌入式·c语言贪吃蛇
技术无疆43 分钟前
【Python】Streamlit:为数据科学与机器学习打造的简易应用框架
开发语言·人工智能·python·深度学习·神经网络·机器学习·数据挖掘
金灰1 小时前
HTML5--裸体回顾
java·开发语言·前端·javascript·html·html5
爱上语文1 小时前
Java LeetCode每日一题
java·开发语言·leetcode
Манго нектар2 小时前
JavaScript for循环语句
开发语言·前端·javascript
程序猿小D2 小时前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa
阿华的代码王国2 小时前
【JavaEE】——文件IO的应用
开发语言·python