c#反射:如何获得私有事件

本文关键字:事件 何获得 反射 | 更新日期: 2023-09-27 18:17:09

是否可以使用反射获得类的私有事件?下面的代码无法获取事件:

//class having a private Event.
public class Sample
{
    private delegate void MyDelegate(string ip4);
    private event MyDelegate MyEvent;
}
internal class Program
{
    private static void Main(string[] args)
    {
        //try getting the non-public event
        EventInfo[] events = typeof (Sample).GetEvents(BindingFlags.NonPublic);
        Console.WriteLine(events.Length); //it's 0
        var evt = typeof (Sample).GetEvent("MyEvent", BindingFlags.NonPublic); //evt is null
    }
}

c#反射:如何获得私有事件

您还需要指定BindingFlags.Instance ..

var evt = typeof (Sample)
  .GetEvent("MyEvent", BindingFlags.NonPublic | BindingFlags.Instance); //evt is null
var evt = typeof(Sample).GetEvent("MyEvent", BindingFlags.NonPublic | BindingFlags.Instance);