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

C# 如何在C中存储函数指针#,c#,.net,function,pointers,C#,.net,Function,Pointers,假设我想将一组函数指针存储在列表中,然后稍后调用它们,甚至可以使用参数。。。比如,如果我存储在一个Dict中,我可以用参数调用func吗?我该怎么做?查看委托的C#文档,它是函数指针的C#等价物(它可能是普通函数指针,也可能是一次循环以提供此参数)。有很多信息对您有用。.NET使用委托而不是函数指针。您可以将委托实例像任何其他类型的对象一样存储在字典或其他文件中 请参阅MSDN上的《C#编程指南》。有几种方法可以做到这一点。您可以通过使用代理,按照其他人的建议进行操作。但要让字典正常工作,它们都

假设我想将一组函数指针存储在
列表中
,然后稍后调用它们,甚至可以使用参数。。。比如,如果我存储在一个
Dict
中,我可以用参数调用func吗?我该怎么做?

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

.NET使用委托而不是函数指针。您可以将委托实例像任何其他类型的对象一样存储在字典或其他文件中


请参阅MSDN上的《C#编程指南》。

有几种方法可以做到这一点。您可以通过使用代理,按照其他人的建议进行操作。但要让字典正常工作,它们都需要相同的签名

var funcs = new Dictionary<Action<object[]>, object[]>();
var funcs=new Dictionary();
或者,如果它们有不同的签名,您可以使用实际的反射方法,如下所示

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

您完全可以拥有一本功能字典:

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!";});

使用委托或事件(取决于使用情况)。

如果仅存储事件处理程序,则

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

...

protected void someEventHandler(object sender, EventArgs e)
{
   //Do something.
}
Dictionary dictEvents=new Dictionary();
添加(“Event1”,someEventHandler);
...
受保护的void someEventHandler(对象发送方、事件参数e)
{
//做点什么。
}
编辑:

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

Dict看起来是个坏主意,但那只是我的想法。我用它来“切换”类型,使用类型作为键,使用函数作为代码。在“switch(typeof(string))”不起作用的地方效果很好。您也可以直接调用它们:
functionList[“firstFunction”]()
关于委托的哪个C#文档?链接会很有帮助。如何将事件存储在集合中?@svick,事件属性downy有get和set,它们有add和remove,因为事件保留一个处理程序列表。你怎么会认为问题是关于事件处理程序的?
Dictionary<string, EventHandler> dictEvents = new Dictionary<string, EventHandler>();
dictEvents.Add("Event1", someEventHandler);

...

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