从事件获取委托处理程序

本文关键字:处理 程序 事件 获取 | 更新日期: 2023-09-27 18:07:28

我试图获得事件处理程序而不做任何更改在MyControl类。我试图使用反射,但我无法获得处理程序。下面是一个代码示例。由于

public class MyControl : Control
{
    public void Register()
    {
        SizeChanged += MyControl_SizeChanged;
    }
    void MyControl_SizeChanged(object sender, EventArgs e)
    {
        // Do something
    }
}
//[TestFixture]
public class MyControlTest
{
    //  [Test]
    public void RegisterTest()
    {
        var control = new MyControl();
        control.Register();
        var eventInfo = control.GetType().GetEvent("SizeChanged", BindingFlags.Public | BindingFlags.Instance);
        // Need to get the handler (delegate) and GetInvocationList().Count
        EventHandler handler = ...;
        var count = handler.GetInvocationList().Count();
        Assert.That(count, IsolationLevel.EqualTo(1));
    }
}

从事件获取委托处理程序

事件实际上没有处理程序;事件只是一对特殊命名的add &移除方法。
更多信息,请看我的博客。

事件如何存储其处理程序是一个实现细节;WinForms控件使用EventHandlerList .
在源代码中可以看到

这可能是因为它的保护级别目前是private,从你发布的代码

可以看出
void MyControl_SizeChanged(object sender, EventArgs e)
{
    // Do something
}