如何在C#中存储函数指针

时间:2010-03-31 03:03:00

标签: c# .net function pointers

假设我想在List<(*func)>中存储一组函数指针,然后稍后调用它们,甚至可能使用参数...就像我存储在Dict<(*func), object[] params>中一样,我可以调用func参数?我该怎么做?

6 个答案:

答案 0 :(得分:33)

.NET使用委托而不是函数指针。您可以将代理实例与任何其他类型的对象一起存储在字典中或其他方式。

请参阅MSDN上的C#编程指南中的Delegates

答案 1 :(得分:22)

你绝对可以拥有一本功能词典:

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();

答案 2 :(得分:8)

查看委托中的C#文档,它是函数指针的C#等价物(它可以是普通函数指针,也可以是curry一次以提供this参数)。有很多信息对你有用。

答案 3 :(得分:2)

有几种方法可以做到这一点。你可以像其他人通过使用代表建议的那样去做。但要让字典工作,他们都需要相同的签名。

var funcs = new Dictionary<Action<object[]>, object[]>();

如果他们有不同的签名,您可以使用实际的反射方法,如下面的

var funcs = new Dictionary<MethodInfo, object[]>();

答案 4 :(得分:2)

使用ether代理或事件(取决于用法)。

答案 5 :(得分:-1)

如果您只存储事件处理程序,那么......

Dictionary<string, EventHandler> dictEvents = new Dictionary<string, EventHandler>();
dictEvents.Add("Event1", someEventHandler);

...

protected void someEventHandler(object sender, EventArgs e)
{
   //Do something.
}

编辑:

  • 我把它放在这里,因为当我找到这篇文章时,我正在寻找一种类似的方法。但是,这篇文章中的解决方案并不适合我的情况所以我想我会分享对我有用的东西。