如何通过反射将参数传递给方法
Posted
技术标签:
【中文标题】如何通过反射将参数传递给方法【英文标题】:How to pass parameters to a method by reflection 【发布时间】:2010-11-30 16:19:19 【问题描述】:除了my precedent question,我想将参数传递给方法“WriteTrace”。但我不知道该怎么做。
这里是实际代码:
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);
我是否使用这些信息创建一个派生自 EventArgs 的类 TraceEventArgs ? 如何在方法 SubscribeEvent 中传递这些信息?
感谢您的帮助,
弗洛里安
编辑
抱歉,这里引用“我以前的问题”:Subscribe to an event with Reflection
【问题讨论】:
【参考方案1】:试试这样的:
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);
【讨论】:
我忘记添加上一个问题的链接。我想传递的控件是一个表单(用于测试):“我希望这个类订阅一个事件,例如表单控件的加载事件。控件和事件是动态定义的,所以我想使用反射来做到这一点" 很抱歉造成混乱以上是关于如何通过反射将参数传递给方法的主要内容,如果未能解决你的问题,请参考以下文章