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

相关推荐
Never_Satisfied1 分钟前
在JavaScript / HTML中,HTML元素自定义属性使用指南
开发语言·javascript·html
Ulyanov5 分钟前
大规模战场数据与推演:性能优化与多视图布局实战
开发语言·python·性能优化·tkinter·pyvista·gui开发
nsjqj6 分钟前
JavaEE初阶:多线程初阶(2)
java·开发语言
明天…ling11 分钟前
php底层原理与安全漏洞实战
开发语言·php
爱说实话18 分钟前
C# DependencyObject类、Visual类、UIElement类
开发语言·c#
智码未来学堂20 分钟前
C语言指针:打开通往内存世界的大门
c语言·开发语言
黎雁·泠崖21 分钟前
Java面向对象:对象数组核心+综合实战
java·开发语言
野生技术架构师28 分钟前
2026最新最全Java 面试题大全(整理版)2000+ 面试题附答案详解
java·开发语言
南村群童欺我老无力.31 分钟前
Flutter 框架跨平台鸿蒙开发 - 打造表情包制作器应用
开发语言·javascript·flutter·华为·harmonyos
TDengine (老段)31 分钟前
TDengine C# 语言连接器进阶指南
大数据·数据库·人工智能·物联网·c#·时序数据库·tdengine