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

假设我想在List存储一组函数指针,然后稍后调用它们,甚至可能使用参数…就像我存储在Dict我可以用参数调用func吗? 我该怎么办?

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

请参阅MSDN上的C#编程指南中的代理 。

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

 Dictionary> actionList = new Dictionary>(); Dictionary> functionList = new Dictionary>(); actionList.Add("firstFunction", ()=>{/*do something;*/}); functionList.Add("firstFunction", ()=>{return "it's a string!";}); 

然后,您可以调用这样的方法:

 string s = functionList["firstFunction"].Invoke(); 

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

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

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

或者,如果它们具有不同的签名,您可以使用实际的reflection方法,如下所示

 var funcs = new Dictionary(); 

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

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

 Dictionary dictEvents = new Dictionary(); dictEvents.Add("Event1", someEventHandler); ... protected void someEventHandler(object sender, EventArgs e) { //Do something. } 

编辑:

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