Pergunta

Existe uma maneira de chamar um método sobrecarregado usando a reflexão em .NET (2,0). Tenho uma aplicação que instancia dinamicamente classes que foram derivadas de uma classe base comum. Para fins de compatibilidade, esta classe de base contém 2 métodos com o mesmo nome, uma com parâmetros, e um sem. Eu preciso chamar o método sem parâmetros através do método Invoke. Agora, tudo o que eu vejo é um erro dizer-me que eu estou tentando chamar um método ambígua.

Sim, eu poderia apenas converter o objeto como uma instância da minha classe base e chamar a necessidade método que eu. Eventualmente de que irá acontecer, mas agora, complicações internas não vai permitir isso.

Qualquer ajuda seria ótimo! Obrigado.

Foi útil?

Solução

Você tem que especificar qual o método que você deseja:

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

Outras dicas

Sim. Quando você chamar o método passar os parâmetros que correspondem a sobrecarga que você quer.

Por exemplo:

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

Se você fizer isso de outra maneira ter cuidado para que você chegar a um direito (ou seja por encontrar o MemberInfo e chamar Invoke.) -. A sobrecarga sem parâmetro pode ser o primeiro encontrado

Uso da sobrecarga GetMethod que leva um System.Type [], e passar um vazio Tipo [];

typeof ( Class ).GetMethod ( "Method", new Type [ 0 ] { } ).Invoke ( instance, null );
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top