Events 如何通过反射将参数传递给方法
此外,我想将参数传递给方法“WriteTrace”。但我不知道怎么做 下面是实际代码:Events 如何通过反射将参数传递给方法,events,reflection,c#-2.0,Events,Reflection,C# 2.0,此外,我想将参数传递给方法“WriteTrace”。但我不知道怎么做 下面是实际代码: public class Trace { public void WriteTrace(object sender, EventArgs e) { Console.WriteLine("Trace !"); } } public void SubscribeEvent(Control control) { if (typeof(Control).IsAss
public class Trace
{
public void WriteTrace(object sender, EventArgs e)
{
Console.WriteLine("Trace !");
}
}
public void SubscribeEvent(Control control)
{
if (typeof(Control).IsAssignableFrom(control.GetType()))
{
Trace test = this;
MethodInfo method = typeof(Trace).GetMethod("WriteTrace");
EventInfo eventInfo = control.GetType().GetEvent("Load");
// Create the delegate on the test class because that's where the
// method is. This corresponds with `new EventHandler(test.WriteTrace)`.
Delegate handler = Delegate.CreateDelegate(eventInfo.EventHandlerType, test, method);
// Assign the eventhandler. This corresponds with `control.Load += ...`.
eventInfo.AddEventHandler(control, handler);
}
}
现在我想在跟踪中获得一些信息:
- 控件的名称
- 事件的名称
public void WriteTrace(object sender, EventArgs e) { Console.WriteLine("Control : " + e.ControlName + "Event : " + e.EventName); }
对不起,这里是对“我的上一个问题”的引用:尝试以下内容:
public void WriteTrace(object sender, EventArgs e, string eventName)
{
Control c = (Control)sender;
Console.WriteLine("Control: " + f.Name + ", Event: " + eventName);
}
public void SubscribeEvent(Control control, string eventName) {
EventInfo eInfo = control.GetType().GetEvent(eventName);
if (eInfo != null) {
// create a dummy, using a closure to capture the eventName parameter
// this is to make use of the C# closure mechanism
EventHandler dummyDelegate = (s, e) => WriteTrace(s, e, eventName);
// Delegate.Method returns the MethodInfo for the delegated method
Delegate realDelegate = Delegate.CreateDelegate(eInfo.EventHandlerType, dummyDelegate.Target, dummyDelegate.Method);
eInfo.AddEventHandler(control, realDelegate);
}
}
我忘了给我的上一个问题添加链接。我假设传递的控件是一个表单(用于测试):“我希望此类订阅一个事件,例如表单控件的加载事件。控件和事件是动态定义的,因此我希望使用反射来执行此操作”很抱歉造成混淆