Gibt es eine Möglichkeit, eine überladene Methode mithilfe von Reflection in .NET (2.0) aufzurufen? Ich habe eine Anwendung, die Klassen, die von einer gemeinsamen Basisklasse abgeleitet wurden, dynamisch instanziiert. Aus Kompatibilitätsgründen enthält diese Basisklasse zwei gleichnamige Methoden, eine mit und eine ohne Parameter. Ich muss die parameterlose Methode über die Invoke-Methode aufrufen. Im Moment erhalte ich nur einen Fehler, der mir mitteilt, dass ich versuche, eine mehrdeutige Methode aufzurufen.
Ja, ich könnte das Objekt einfach als Instanz meiner Basisklasse umwandeln und die von mir benötigte Methode aufrufen. Irgendwann wird das passieren, aber im Moment werden interne Komplikationen es nicht zulassen.
Jede Hilfe wäre toll! Vielen Dank.
quelle
Ja. Wenn Sie die Methode aufrufen, übergeben Sie die Parameter, die der gewünschten Überladung entsprechen.
Zum Beispiel:
Type tp = myInstance.GetType(); //call parameter-free overload tp.InvokeMember( "methodName", BindingFlags.InvokeMethod, Type.DefaultBinder, myInstance, new object[0] ); //call parameter-ed overload tp.InvokeMember( "methodName", BindingFlags.InvokeMethod, Type.DefaultBinder, myInstance, new { param1, param2 } );
Wenn Sie dies umgekehrt tun (dh indem Sie MemberInfo finden und Invoke aufrufen), achten Sie darauf, dass Sie die richtige finden - die parameterfreie Überladung könnte die erste sein, die gefunden wird.
quelle
Verwenden Sie die GetMethod-Überladung, die einen System.Type [] akzeptiert, und übergeben Sie einen leeren Type [].
typeof ( Class ).GetMethod ( "Method", new Type [ 0 ] { } ).Invoke ( instance, null );
quelle