假设我想要将一组函数指针存储在 List<(*func)>
中,然后稍后调用它们,甚至可能带有参数... 例如如果我将其存储在 Dict<(*func), object[] params>
中,我能否使用这些参数调用该函数?如何实现?
假设我想要将一组函数指针存储在 List<(*func)>
中,然后稍后调用它们,甚至可能带有参数... 例如如果我将其存储在 Dict<(*func), object[] params>
中,我能否使用这些参数调用该函数?如何实现?
.NET使用委托(delegates)而非函数指针。你可以像存储其他类型对象一样,将委托实例存储在字典或其他位置中。
请参阅MSDN上的C#编程指南中的“委托”章节。
Dictionary<string, Action<T>> actionList = new Dictionary<string, Action<T>>();
Dictionary<string, Func<string>> functionList = new Dictionary<string, Func<string>>();
actionList.Add("firstFunction", ()=>{/*do something;*/});
functionList.Add("firstFunction", ()=>{return "it's a string!";});
您可以按照以下方式调用方法:string s = functionList["firstFunction"].Invoke();
functionList["firstFunction"]()
- Sam Harwell有几种方法可以做到这一点。您可以像其他人建议的那样通过使用委托来实现。但是,为了使字典正常工作,它们都需要具有相同的签名。
var funcs = new Dictionary<Action<object[]>, object[]>();
var funcs = new Dictionary<MethodInfo, object[]>();
如果你只是存储事件处理程序,那么...
Dictionary<string, EventHandler> dictEvents = new Dictionary<string, EventHandler>();
dictEvents.Add("Event1", someEventHandler);
...
protected void someEventHandler(object sender, EventArgs e)
{
//Do something.
}
编辑: