是否可以在c#中创建泛型函数,将一些类和方法(类)和参数(也许是结果类型)作为输入,并生成该类的实例并调用该函数带参数的类并返回结果?
答案 0 :(得分:3)
不确定
public class MyClass
{
public class Test
{
public int TestMethod(int a, int b)
{
return a + b;
}
}
public static void Main()
{
int result = ExecuteMethod<Test, int>("TestMethod", 1, 2);
Console.Read();
}
public static TResult ExecuteMethod<TClass, TResult>(string methodName, params object[] parameters)
{
// Instantiate the class (requires a default parameterless constructor for the TClass type)
var instance = Activator.CreateInstance<TClass>();
// Gets method to execute
var method = typeof(TClass).GetMethod(methodName, BindingFlags.Public | BindingFlags.Instance);
// Executes and returns result
return (TResult)method.Invoke(instance, parameters);
}
}
答案 1 :(得分:2)
除非反射是您的绝对选择,否则请使用以下代理之一:
Action<T>
:将允许您执行不返回值的方法。有几个重载可以让你传递额外的参数。
Func<TResult>
:允许您执行返回类型TResult
结果的方法。有更多的重载可以让你传递额外的参数。它们都遵循Func<T1, T2, T3, TResult>
等语法。
最后,您可以定义自己的代理。
答案 2 :(得分:1)
答案 3 :(得分:1)
以下是使用反射创建类实例的方法,然后在该类上调用方法。
假设你有一个班级:
public class MyType
{
public void DoSomething()
{
// do stuff here
}
}
您可以执行以下操作:
Type instanceType = Type.GetType("MyType");
object instance = Activator.CreateInstance(instanceType);
MethodInfo method = instanceType.GetMethod("MethodName");
object returnValue = method.Invoke(instance, new object[] { /* paramaters go here */ });