関数ポインタのグループをList<(*func)>
に格納し、後でそれらを、おそらくパラメータを使用して呼び出すとしましょう... Dict<(*func), object[] params>
に格納した場合のように呼び出すことができますパラメータ付きの関数?どうすればよいですか?
.NETは、関数ポインターの代わりにデリゲートを使用します。デリゲートインスタンスは、他の種類のオブジェクトと同じように、辞書などに保存できます。
MSDNのC#プログラミングガイドの Delegates を参照してください。
あなたは絶対に関数の辞書を持つことができます:
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();
デリゲートに関するC#のドキュメントを見てください。これはC#で関数ポインターに相当します(プレーンな関数ポインターであるか、このパラメーターを指定するために一度カレーされる可能性があります)。あなたに役立つ情報がたくさんあります。
これを行うにはいくつかの方法があります。他の人がデリゲートを使用して提案したように、それを行うことができます。しかし、辞書を機能させるには、すべて同じ署名が必要です。
var funcs = new Dictionary<Action<object[]>, object[]>();
または、署名が異なる場合は、次のような実際の反映方法を使用できます。
var funcs = new Dictionary<MethodInfo, object[]>();
デリゲートまたはイベントを使用します(使用法によって異なります)。