C# C“使通用方法知道如何调用上的函数”;“一些”;班
是否可以在c#中生成泛型函数,将某些类和方法(类的)以及方法的参数(可能还有结果类型)作为输入,并生成该类的实例,使用参数调用该类的函数并返回结果?是的,这是可能的。你可以通过反射来做到这一点 这里有一些有用的链接C# C“使通用方法知道如何调用上的函数”;“一些”;班,c#,generics,C#,Generics,是否可以在c#中生成泛型函数,将某些类和方法(类的)以及方法的参数(可能还有结果类型)作为输入,并生成该类的实例,使用参数调用该类的函数并返回结果?是的,这是可能的。你可以通过反射来做到这一点 这里有一些有用的链接 除非反射是您的绝对选项,否则请使用以下学员之一: :将允许您执行不返回值的方法。有几个重载将允许您传入其他参数 :将允许您执行返回类型为TResult的结果的方法。有更多的重载将允许您传递额外的参数。它们都遵循语法Func等等 最后,您可以定义自己的委托 当然可以 public
除非反射是您的绝对选项,否则请使用以下学员之一:
- :将允许您执行不返回值的方法。有几个重载将允许您传入其他参数
- :将允许您执行返回类型为
的结果的方法。有更多的重载将允许您传递额外的参数。它们都遵循语法TResult
等等Func
- 最后,您可以定义自己的委托 当然可以
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);
}
}
公共类MyClass
{
公开课考试
{
公共int测试方法(int a,int b)
{
返回a+b;
}
}
公共静态void Main()
{
int result=ExecuteMethod(“TestMethod”,1,2);
Console.Read();
}
公共静态TResult ExecuteMethod(字符串方法名,参数对象[]参数)
{
//实例化类(TClass类型需要默认的无参数构造函数)
var instance=Activator.CreateInstance();
//获取要执行的方法
var method=typeof(TClass).GetMethod(methodName,BindingFlags.Public | BindingFlags.Instance);
//执行并返回结果
return(TResult)方法。Invoke(实例、参数);
}
}
下面介绍如何使用反射创建类的实例,然后调用该类上的方法
假设你有一门课:
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 */ });
您应该能够使用reflectioncan添加代码,请参见此处:当您说“get as input…method”时,您是指包含方法名称的字符串吗?