在C#中调用具有未知类型和参数数量的函数

Ali*_*ili 3 c# delegates

我正在用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"对象,而不是在他们的方法中定义它们的常用参数.所以,我不想使用这种方法.

Chr*_*isF 7

您可以使用反射来获取有关方法的所有信息.

例如,一旦你有了,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来实际调用该方法.

它的第一个参数是"调用方法的对象".

它的第二个参数是所述方法的参数列表.