2009-09-13 12 views

Respuesta

32

Sólo

Type.GetType(typeName).GetMethod(methodName).Invoke(null, arguments); 

donde typeName es el nombre del tipo como una cadena, methodName es el nombre del método como una cadena, y arguments es una matriz de objetos que contienen los argumentos para llamar al método con .

+0

Guau, vale, sí, funciona, no sabía de Type.GetType, solo asegúrese de que el nombre de clase estático esté completamente calificado con el espacio de nombres –

+0

trabajando para *** 'clase estática interna' ***? – Kiquenet

+0

@GeorgeMauer ¿y si no hay espacio de nombres? – MonsterMMORPG

1

Aquí es un esquema básico de lo que haría:

  1. analizar todos los objetos en el dominio de aplicación actual - encontrar el que coincida con lo que conoce el nombre de la clase que sea
  2. Obtener el método estático con el nombre que conoce en ese objeto
  3. Invocarlo dinámicamente.

Editar: esto funcionará si no se conoce el espacio de nombres de la clase estática. De lo contrario, utilice la solución de Daniel Brückner ya que es mucho más simple.

+0

creo que todavía es necesario para escanear el dominio de aplicación - Si se pudiera crear una instancia de una clase que sería dinámico lenguaje –

+1

Type.GetType? http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx – dtb

+2

Esto podría ser una descripción literal de lo que está ocurriendo durante el proceso de reflexión, sin embargo, no creo que esta respuesta sea útil para el OP porque no demuestra ni explica prácticamente cómo se pueden tomar los pasos que se han resumido utilizando el.net framework APIs – Crippledsmurf

1
System.Reflection.Assembly info = typeof(System.Environment).Assembly; 

Type t = info.GetType("System.Environment"); 
MethodInfo m = t.GetMethod("GetFolderPath"); 

object result = m.Invoke(null, arguments); 
3

primer lugar usted necesita para obtener el tipo (por iteración sobre el conjunto utilizando la reflexión)

ver este enlace para obtener más información: http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.aspx

o utilizar

Assembly.GetType 

una vez que haya el tipo en la mano puede iterar sobre los miembros usando reflection o

MethodInfo method = typeof(MyClass).GetMethod("MyMethod"); 

luego puede usar MethodInfo.Invoke y pasar argumentos para invocar el método cuando desea invocarlo.

+0

** MyClass ** es público, no es forma de *** 'clase estática interna ***? – Kiquenet

1

Lo que está haciendo aquí está reflejando en el tipo llamado Environment y el uso de los métodos y GetProperyGetGetMethod para obtener el método get de la propiedad Environment.CurrentDirectory como tal;

var getMethod = typeof(Environment).GetProperty("CurentDirectory", BindingFlags.Public | BindingFlags.Static).GetGetMethod(); 
var currentDirectory = (string)getMethod.Invoke(null, null); 

Llamar al método get de una propiedad devuelve su valor y es equivalente a;

var value = Environment.CurrentDirectory; 
Cuestiones relacionadas