Вызов статического метода с использованием типа

Как вызвать статический метод из Type, если я знаю значение переменной Type и имя статического метода?

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

Итак, учитывая a Type t, цель состоит в вызове FooMethod() для класса с Type t. В принципе мне нужно отменить оператор typeof().

Ответ 1

Вам нужно вызвать 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, null) means calling static method with no parameters
        }
    }
}

Конечно, в приведенном выше примере вы могли бы также назвать FooClass.FooMethod, поскольку нет смысла использовать для этого отражение. Следующий пример имеет больше смысла:

public class BarClass {
    public void BarMethod(Type t, string method) {
        var methodInfo = t.GetMethod(method);
        if (methodInfo != null) {
            methodInfo.Invoke(null, null); // (null, null) means calling static method with no parameters
        }
    }
}

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

Ответ 2

Перейдите в класс MethodInfo и GetMethod ( ) по типу.

Существует множество различных перегрузок для разных ситуаций.