如何使用反射调用函数

时间:2010-09-28 05:29:06

标签: c#

喜 如何使用反射

调用此函数

例如:

void testFunction(int a , int b , out b)
void testFunction(int a, int b, ref b)

4 个答案:

答案 0 :(得分:4)

这就是你要追求的吗?

using System;
using System.Reflection;

class Test
{
    public void testFunction1(int a, int b, ref int c)
    {
        c += a + b;
    }

    public void testFunction2(int a, int b, out int c)
    {
        c = a + b;
    }

    static void Main()
    {
        MethodInfo method = typeof(Test).GetMethod("testFunction1");
        object[] args = new object[] { 1, 2, 3 };
        Test instance = new Test();
        method.Invoke(instance, args);
        // The ref parameter will be updated in the array, so this prints 6
        Console.WriteLine(args[2]);

        method = typeof(Test).GetMethod("testFunction2");
        // The third argument here has to be of the right type,
        // but the method itself will ignore it
        args = new object[] { 1, 2, 999 };
        method.Invoke(instance, args);
        // The ref parameter will be updated in the array, so this prints 3
        Console.WriteLine(args[2]);
    }
}

请注意,如果要在之后获取更新的ref / out参数值,则必须保留对用于指定参数的数组的引用。

如果您需要非公开方法,则需要在BindingFlags的调用中指定GetMethod

答案 1 :(得分:0)

This article给出了如何使用反射调用函数的示例,并给出了一个示例。

答案 2 :(得分:0)

答案 3 :(得分:0)

首先,该函数需要是类的成员:

class MyClass
{
    public: void testFunction(int a , int b , out b);
}

然后,您需要一个类的实例:

MyClass myObj = new MyClass();

然后,使用反射来获取函数:

MethodInfo[] myMethods = typeof(myObj).GetMethods(BindingFlags.Public);

通过这些方法迭代找到你想要的方法:

MethodInfo myTarget = NULL;
foreach(MethodInfo mi in myMethods)
{
    if (mi.Name == "testFunction")
    {
        myTarget = mi;
        break;
    }
}

最后,调用它:

int[] myParams = {1, 2, 3};
myTarget.Invoke(myObj, (object[])myParams);