Domanda

Esiste un modo per invocare un metodo sovraccarico usando reflection in .NET (2.0). Ho un'applicazione che istanzia dinamicamente le classi che sono state derivate da una classe base comune. Ai fini della compatibilità, questa classe di base contiene 2 metodi con lo stesso nome, uno con parametri e uno senza. Devo chiamare il metodo senza parametri tramite il metodo Invoke. In questo momento, tutto ciò che ottengo è un errore che mi dice che sto cercando di chiamare un metodo ambiguo.

Sì, potrei semplicemente lanciare l'oggetto come istanza della mia classe base e chiamare il metodo di cui ho bisogno. Alla fine accadrà , ma in questo momento le complicazioni interne non lo permetteranno.

Qualsiasi aiuto sarebbe fantastico! Grazie.

È stato utile?

Soluzione

Devi specificare quale metodo vuoi:

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

Altri suggerimenti

Sì. Quando invochi il metodo, passa i parametri che corrispondono al sovraccarico che desideri.

Ad esempio:

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 lo fai al contrario (ad es. trovando MemberInfo e chiamando Invoke) fai attenzione a ottenere quello giusto: il sovraccarico senza parametri potrebbe essere il primo trovato.

Usa il sovraccarico GetMethod che accetta un System.Type [] e passa un Tipo vuoto [];

typeof ( Class ).GetMethod ( "Method", new Type [ 0 ] { } ).Invoke ( instance, null );
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top