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");
}
}