C#清除一个事件的加载的所有方法

本文介绍如何使用C#反射来获取并操作类中的事件委托字段,通过示例展示了如何利用反射删除所有已注册的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from: http://bbs.youkuaiyun.com/topics/370126564


可以通过反射获取事件编译后的委托字段,然后删除所有方法。


    public delegate void MyDelegate();

    public static class Test
    {
        public static event MyDelegate MyEvent;
        public static void Foo()
        {
            if (MyEvent != null)
                MyEvent();
        }
    }

    public class Program
    {
        static void Main()
        {
            Test.MyEvent += new Program().Print;
            Test.MyEvent += new Program().Print;
            Test.MyEvent += new Program().Print;
            Test.MyEvent += new Program().Print;

            Assembly testType = Assembly.Load(new AssemblyName(@"ClassLibrary1"));
            Type type = testType.GetType("ConsoleApplication12.Test");

            //根据CLR Via C#第三版 第234页 Event编译后生成一个委托字段与一个add、一个delete方法。
            FieldInfo myeventInfo = type.GetField("MyEvent", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Public);
        }

        public void Print()
        {
            Console.WriteLine("111111111111111111");
        }
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值