otra - metodos extendidos c#
Llamar a un método estático usando un Tipo (2)
Compruebe en la clase MethodInfo y los métodos GetMethod() en Type.
Hay una cantidad de sobrecargas diferentes para diferentes situaciones.
¿Cómo llamo a un método estático de un Type
, suponiendo que conozco el valor de la variable Type
y el nombre del método estático?
public class FooClass {
public static FooMethod() {
//do something
}
}
public class BarClass {
public void BarMethod(Type t) {
FooClass.FooMethod() //works fine
if (t is FooClass) {
t.FooMethod(); //should call FooClass.FooMethod(); compile error
}
}
}
Entonces, dado un Type t
, el objetivo es llamar a FooMethod()
en la clase que es de Type t
. Básicamente, necesito invertir el operador typeof()
.
MethodInfo.Invoke
llamar MethodInfo.Invoke
método MethodInfo.Invoke
:
public class BarClass {
public void BarMethod(Type t) {
FooClass.FooMethod() //works fine
if (t == typeof(FooClass)) {
t.GetMethod("FooMethod").Invoke(null, null); //null - means calling static method
}
}
}
Por supuesto, en el ejemplo anterior, también puede llamar a FooClass.FooMethod
ya que no tiene sentido utilizar la reflexión para eso. La siguiente muestra tiene más sentido:
public class BarClass {
public void BarMethod(Type t, string method) {
var methodInfo = t.GetMethod(method);
if (methodInfo != null) {
methodInfo.Invoke(null, null); //null - means calling static method
}
}
}
public class Foo1Class {
static public Foo1Method(){}
}
public class Foo2Class {
static public Foo2Method(){}
}
//Usage
new BarClass().BarMethod(typeof(Foo1Class), "Foo1Method");
new BarClass().BarMethod(typeof(Foo2Class), "Foo2Method");