2010-02-21 8 views
10

Imagínese que tengo la clase siguiente:Cómo invocar métodos con árbitro de entrada/salida params utilizando la reflexión

class Cow { 
    public static bool TryParse(string s, out Cow cow) { 
     ... 
    } 
} 

¿Es posible llamar a TryParse través de la reflexión? Yo sé lo básico:

var type = typeof(Cow); 
var tryParse = type.GetMethod("TryParse"); 

var toParse = "..."; 

var result = (bool)tryParse.Invoke(null, /* what are the args? */); 
+0

Esta es precisamente la pregunta que iba a preguntar, incluso hasta el nombre del método: D –

Respuesta

5

Usted puede hacer algo como esto:

static void Main(string[] args) 
{ 
    var method = typeof (Cow).GetMethod("TryParse"); 
    var cow = new Cow();   
    var inputParams = new object[] {"cow string", cow}; 
    method.Invoke(null, inputParams); 
} 

class Cow 
{ 
    public static bool TryParse(string s, out Cow cow) 
    { 
     cow = null; 
     Console.WriteLine("TryParse is called!"); 
     return false; 
    } 
} 
+6

Tenga en cuenta que: a) No necesita una instancia 'Cow' para invocar el método TryParse, simplemente puede pasar un valor de nulo. b) la 'vaca' analizada se devuelve en los parámetros de entrada [1], la 'vaca' en el código anterior permanece sin cambios. –

+0

Y por lo tanto esta fue la respuesta, +1 en todo. –

Cuestiones relacionadas