是的,所以我设置了一个小TestClass来弄清楚GetMethod实际上会找到方法Test(ref int i)的工作原理。但到目前为止没有任何效果。
[Button(nameof(Method))]
public bool whatever;
private void Test(ref int i)
{
Debug.Log("Works");
}
private void Method()
{
Type[] types = { typeof(int) };
MethodInfo methodInfo = GetType().GetMethod(nameof(Test),
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static,
null, types, null);
Debug.Log(methodInfo);
}
我该怎么办?到目前为止,我无法在网络上找到任何内容(特别是针对GetMethod)
答案 0 :(得分:2)
如果你混合Eser + gcores,你会得到:
private void Test(ref int i)
{
Console.WriteLine(i);
i++;
}
private void Test2(out int i)
{
i = 1000;
}
public void Method()
{
Type[] types = { typeof(int).MakeByRefType() };
MethodInfo methodInfo = GetType().GetMethod(nameof(Test), BindingFlags.NonPublic | BindingFlags.Instance, null, types, null);
int num = 10;
var pars = new object[] { num };
methodInfo.Invoke(this, pars);
Console.WriteLine(pars[0]);
MethodInfo methodInfo2 = GetType().GetMethod(nameof(Test2), BindingFlags.NonPublic | BindingFlags.Instance, null, types, null);
var pars2 = new object[1];
methodInfo2.Invoke(this, pars2);
Console.WriteLine(pars2[0]);
}
注意typeof(int).MakeByRefType()
,以及调用方法修改包含参数的object[]
数组这一事实。我添加了第二个示例out
,表明您仍然使用.MakeByRefType()
,只是您不需要使用参数初始化object[]
数组。啊,您应该使用您需要的确切BindingFlags
,而不是将MSDN中包含的每个BindingFlags
放在一起。静态和非静态工作方式不同: - )
答案 1 :(得分:0)
通过调用GetMethod
的适当重载,您可以找到具有指定参数类型的方法。要使参数成为引用类型,请使用代码:
Type[] types = { typeof(int).MakeByRefType() };