我有一个自定义Control
,我在其上覆盖了OnInit
方法。
更新
我似乎需要通过Init
获取userControl.GetType().GetEvent("Init")
事件。但是,该事件的RaiseMethod
属性为null
,因此我无法通过反射引发事件。 任何线索?
我使用以下代码加载控件(ReflectionUtil
使用反射调用方法):
Page p = new Page();
UserControl userControl = (UserControl)p.LoadControl(path);
p.Controls.Add((Control)userControl);
//EventArgs eventArgs = new EventArgs();
//ReflectionUtil.CallMethod((object)p, "OnInit", (object[])new EventArgs[1] { eventArgs });
//ReflectionUtil.CallMethod((object)userControl, "OnInit", (object[])new EventArgs[1] { eventArgs });
//Plain Reflection doesn't work either...
EventArgs eventArgs = new EventArgs();
MethodInfo initMethod = userControl.GetType().GetMethod("OnInit");
initMethod.Invoke(userControl, (object[])new EventArgs[1]
{
eventArgs
});
但是,当我在自定义控件的OnInit
方法中设置断点时,它不会被调用。 我在这里遗漏了什么吗?非常感谢任何帮助。
答案 0 :(得分:1)
OnInit受到保护,GetMethod超载仅使用公共方法。
您可以使用the overload with the bindingflag NonPublic获取受保护的方法。