我正在用C#编写一个库,我必须在其类中调用其他程序员定义的一些方法,所以我不了解类型和参数数量.例如,
Class exampleClass{
void method1(int param1, double param2){...}
bool method2(){...}
object method3(string param1){....}
}
Run Code Online (Sandbox Code Playgroud)
在我的程序中,我想调用这些方法.由于我不知道他们的参数和返回类型,我不能使用" 委托 'S(具有已知类型和参数),但在运行时,我可以使用,例如,反射提取方法和参数(’ MethodInfo的 "s)来自班级,但如何使用这些信息来调用方法?(假设我可以生成适当的值以用作方法的参数).
谢谢
PS:我知道"params object []"方法,但它会强制程序员使用"params"对象,而不是在他们的方法中定义它们的常用参数.所以,我不想使用这种方法.
您可以使用反射来获取有关方法的所有信息.
例如,一旦你有了,MethodInfo你就可以得到ReturnType
Type MyType = Type.GetType("System.Reflection.FieldInfo");
MethodInfo Mymethodinfo = MyType.GetMethod("GetValue");
Console.Write ("\n" + MyType.FullName + "." + Mymethodinfo.Name);
Console.Write ("\nReturnType = {0}", Mymethodinfo.ReturnType);
Run Code Online (Sandbox Code Playgroud)
GetParameters 会告诉你参数:
Type delegateType = typeof(MainClass).GetEvent("ev").EventHandlerType;
MethodInfo invoke = delegateType.GetMethod("Invoke");
ParameterInfo[] pars = invoke.GetParameters();
foreach (ParameterInfo p in pars)
{
Console.WriteLine(p.ParameterType);
}
Run Code Online (Sandbox Code Playgroud)
获得此信息后,您可以使用它Invoke来实际调用该方法.
它的第一个参数是"调用方法的对象".
它的第二个参数是所述方法的参数列表.