public void GenericMethod<T>()
{
}
и есть метод с параметром типа Type
public void TypeMethod(Type type)
{
}
Вызвать TypeMethod из GenericMethod не составляет труда:
public void GenericMethod<T>()
{
TypeMethod(typeof(T));
}
А как вызвать GenericMethod из TypeMethod?
Поможет Reflection
public static object InvokeGenericMethod(object obj, string methodName, Type genericParam, params object[] pars)
{
var methodInfo = obj.GetType().GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);
var method = methodInfo.MakeGenericMethod(new[] { genericParam });
return method.Invoke(obj, pars);
}
С помощью этого статического метода можно вызвать любой метод любого класса с одним Generic-параметром. Ну и если Generic-параметров больше:
public static object InvokeGenericMethod(object obj, string methodName, Type[] genericParams, params object[] pars)
{
var methodInfo = obj.GetType().GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);
var method = methodInfo.MakeGenericMethod(genericParams);
return method.Invoke(obj, pars);
}
Пример использования:
public void GenericMethod<T>(int param1, object param2)
{
}
public void TypeMethod(Type type, int param1, object param2)
{
InvokeGenericMethod(this, "GenericMethod", type, param1, param2);
}
Комментариев нет:
Отправить комментарий