从事件中获取委托处理程序
Get delegate handler from event
我试图在不对 MyControl class 进行任何更改的情况下获取事件处理程序。我尝试使用反射,但无法获得处理程序。
以下是代码示例。
谢谢
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));
}
}
这可能是因为它的保护级别目前是 private
从您发布的代码中可以看出
void MyControl_SizeChanged(object sender, EventArgs e)
{
// Do something
}
事件实际上没有处理程序;事件只是一对特别命名的添加和删除方法。
有关详细信息,请参阅 my blog。
事件如何存储其处理程序是一个实现细节; WinForms 控件使用 EventHandlerList
.
你可以在 the source.
中看到这个
我试图在不对 MyControl class 进行任何更改的情况下获取事件处理程序。我尝试使用反射,但无法获得处理程序。 以下是代码示例。 谢谢
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));
}
}
这可能是因为它的保护级别目前是 private
从您发布的代码中可以看出
void MyControl_SizeChanged(object sender, EventArgs e)
{
// Do something
}
事件实际上没有处理程序;事件只是一对特别命名的添加和删除方法。
有关详细信息,请参阅 my blog。
事件如何存储其处理程序是一个实现细节; WinForms 控件使用 EventHandlerList
.
你可以在 the source.