Pregunta

¿Hay una manera de invocar un método sobrecargado usando la reflexión en .NET (2.0)? Tengo una aplicación que crea instancias dinámicas de clases derivadas de una clase base común. Por motivos de compatibilidad, esta clase base contiene 2 métodos con el mismo nombre, uno con parámetros y otro sin. Necesito llamar al método sin parámetros a través del método Invocar. En este momento, todo lo que recibo es un error que me dice que estoy tratando de llamar a un método ambiguo.

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

Cualquier ayuda seria genial! Gracias.

¿Fue útil?

Solución

Tienes que especificar qué método quieres:

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

Otros consejos

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

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 lo hace al revés (es decir, si encuentra la información de miembros y llama a Invoke), tenga cuidado de obtener la correcta: la sobrecarga sin parámetros podría ser la primera que se encuentre.

Use la sobrecarga GetMethod que toma un Tipo de Sistema [], y pase un Tipo vacío [];

typeof ( Class ).GetMethod ( "Method", new Type [ 0 ] { } ).Invoke ( instance, null );
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top