喜 如何使用反射
调用此函数例如:
void testFunction(int a , int b , out b)
void testFunction(int a, int b, ref b)
答案 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);