Ich möchte eine Delegate
einer reflektierten Methode, aber die Delegate.CreateDelegate
erfordert die Type
des Delegierten festgelegt werden. Ist es möglich, dynamisch einen "Delegaten" zu erstellen, der zu jeder reflektierten Funktion passt?
Hier ist ein einfaches Beispiel:
class Functions
{
public Functions()
{
}
public double GPZeroParam()
{
return 0.0;
}
public double GPOneParam(double paramOne)
{
return paramOne;
}
public double GPTwoParam(double paramOne, double paramTwo)
{
return paramOne+paramTwo;
}
}
static void Main(string[] args)
{
Dictionary<int, List<Delegate>> reflectedDelegates = new Dictionary<int, List<Delegate>>();
Functions fn = new Functions();
Type typeFn = fn.GetType();
MethodInfo[] methods = typeFn.GetMethods();
foreach (MethodInfo method in methods)
{
if (method.Name.StartsWith("GP"))
{
ParameterInfo[] pi = method.GetParameters();
if (!reflectedDelegates.ContainsKey(pi.Length))
{
reflectedDelegates.Add(pi.Length, new List<Delegate>());
}
// How can I define a delegate type for the reflected method at run time?
Delegate dlg = Delegate.CreateDelegate(typeof(???), fn, method);
reflectedDelegates[pi.Length].Add(dlg);
}
}
}
Aktualisierung:
Am ehesten habe ich das hier gefunden FastInvokeWrapper auf code-project, aber ich versuche immer noch, es zu verstehen, und ich verstehe nicht ganz, wie GetMethodInvoker
bindet die reflektierte Methode an die FastInvokeHandler
.