我试图获取事件处理程序而不在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));
}
}
答案 0 :(得分:1)
事件实际上并没有处理程序;一个事件只是一对特别命名的add& amp;删除方法。
有关详细信息,请参阅my blog。
事件如何存储其处理程序是一个实现细节; WinForms控件使用EventHandlerList
您可以在the source中看到这一点。
答案 1 :(得分:0)
这可能是因为它的保护级别目前是private
,可以从您发布的代码中看出来
void MyControl_SizeChanged(object sender, EventArgs e)
{
// Do something
}