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()方法获取已注册的方法,并逐个打印出它们的名称。

相关推荐
长不胖的路人甲1 小时前
斐波那契查找Java 实现 + 完整思路
java·开发语言
星恒随风1 小时前
C++ 继承进阶:默认成员函数、多继承、虚继承与组合设计
开发语言·c++·笔记·学习
Yeauty1 小时前
用 Whisper 转录前,你不用再离开 Rust
开发语言·rust·ffmpeg·音视频·视频
电子云与长程纠缠1 小时前
UE中使用TGuardValue与TInlineComponentArray数据结构
开发语言·数据结构·学习·ue5·游戏引擎
玖玥拾1 小时前
Unity 3D 笔记(十二)Unity/C# Socket 网络笔记1
网络·unity·c#
呜喵王阿尔萨斯2 小时前
C/C++ const -- 多义混乱
c语言·开发语言·c++
__log2 小时前
幂等性设计:从“重复提交“到“稳如磐石“的系统防护
java·开发语言·spring boot
spider_xcxc2 小时前
Helm 部署 K8s 集群完整笔记
java·开发语言·kubernetes
海清河晏1112 小时前
Qt实战:从零构建美化登录界面
开发语言·c++·qt
一只小灿灿2 小时前
C++ 各类特殊符号、运算符
开发语言·c++