.net reflection .net-2.0 invoke method-overloading

Cómo usar Reflection para invocar un método sobrecargado en.NET



.net-2.0 invoke (3)

¿Hay alguna manera de invocar un método sobrecargado usando reflection en .NET (2.0)? Tengo una aplicación que crea instancias dinámicas de clases que se han derivado de una clase base común. Para fines de compatibilidad, esta clase base contiene 2 métodos del mismo nombre, uno con parámetros y otro sin. Necesito llamar al método sin parámetros a través del método Invoke. En este momento, todo lo que obtengo es un error diciéndome que estoy tratando de llamar a un método ambiguo.

Sí, podría lanzar el objeto como una instancia de mi clase base y llamar al método que necesito. Eventualmente, eso sucederá, pero en este momento, las complicaciones internas no lo permitirán.

¡Cualquier ayuda sería genial! Gracias.


Debe especificar qué método quiere:

class SomeType { void Foo(int size, string bar) { } void Foo() { } } SomeType obj = new SomeType(); // call with int and string arguments obj.GetType() .GetMethod("Foo", new Type[] { typeof(int), typeof(string) }) .Invoke(obj, new object[] { 42, "Hello" }); // call without arguments obj.GetType() .GetMethod("Foo", new Type[0]) .Invoke(obj, new object[0]);


Sí. Cuando invoque el método, pase los parámetros que coincidan con la sobrecarga que desee.

Por ejemplo:

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

Si hace esto al revés (es decir, al encontrar el MemberInfo y llamar a Invoke), tenga cuidado de obtener el correcto: la sobrecarga libre de parámetros podría ser la primera que encuentre.


Utilice la sobrecarga GetMethod que toma un System.Type [], y pase un Tipo vacío [];

typeof ( Class ).GetMethod ( "Method", new Type [ 0 ] { } ).Invoke ( instance, null );