ist mein Ziel mit dem folgenden Code demostrated:generische Methode mit Delegattyp
void MyMethod<T>(T aMethod, params object[] aParams) where T: System.Delegate
{
aMethod.Invoke(aParams);
}
Wie kann ich tun, um diese Art der Sache?
ist mein Ziel mit dem folgenden Code demostrated:generische Methode mit Delegattyp
void MyMethod<T>(T aMethod, params object[] aParams) where T: System.Delegate
{
aMethod.Invoke(aParams);
}
Wie kann ich tun, um diese Art der Sache?
Sie könnten Unconstrained Melody verwenden - oder kneifen Sie das Bit, das dies ermöglicht.
Auf der anderen Seite, das wird nicht tatsächlich eine Invoke
Methode freilegen. Was möchten Sie tun, was nicht möglich ist mit:
void MyMethod(Delegate aMethod, params object[] aParams)
{
aMethod.DynamicInvoke(aParams);
}
? Ich meine, würden Sie nicht wirklich kompilieren Zeit haben Sicherheit auch mit der generischen Version, da die Parameter der falschen Typen sein könnte usw.
T
muss ein Typ sein, aber Sie brauchen keine Generika
void MyMethod(Action<object[]> aMethod, params object[] aParams)
{
aMethod(aParams);
}
void Print(params object[] output)
{
foreach (var o in output)
Console.WriteLine(o);
}
nennen es wie folgt aus:
MyMethod(Print, 1, "Hello");
Dies funktioniert nicht für Delegaten ohne Parameter (MethodInvoker). – Max
ich bin nicht sicher, was Sie tatsächlich zu erreichen versucht: Da nur der Compiler oder Laufzeit von System.Delegate erben kann, welchem Punkt die allgemeine haben über:
Nun, wenn Sie versuchen, etwas schwierig mit Delegate Typ Einschränkungen zu tun, können Sie sich http://code.google.com/p/unconstrained-melody/, die einige il Neuschreiben, damit Sie es tun können.
Oder nur ein Action<object[]>
verwenden - oder viele Überlastungen mit Action<T>
, Action<T1,T2>
usw.
void MyMethod(Action<object[]> aMethod, params object[] aParams)
{
aMethod(aParams);
}
//or
void MyMethod<T>(Action<T> aMethod, T param)
{
aMethod(param);
}
void MyMethod<T1, T2>(Action<T1, T2> aMethod, T1 param1, T2 param2)
{
aMethod(param1, param2);
}
ich wirklich nicht, wie die riesige Liste von Überlastungen, aber in manchen Fällen sind sie die beste Bibliothek Benutzerfreundlichkeit.
Ich hatte irgendwie gehofft, Parameter Typ Sicherheit zu bekommen. – Max
@Max: Warum rufen Sie die Methode dann nicht direkt auf? Ich sehe nicht, was dich das wirklich kauft. –
Ich möchte den allgemeinen Code für die Ausnahmebehandlung extrahieren. try {invoke} catch (1) {} catch (2) {} ... – Max