从事件获取委托处理程序
本文关键字:处理 程序 事件 获取 | 更新日期: 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
}