c# - 如何使用反射来获取带有 ref 关键字的方法?
问题描述
是的,所以我设置了一个小 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)
解决方案
如果您混合 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
内容,而不是将BindingFlags
MSDN 中包含的所有内容放在一起。静态和非静态的工作方式不同:-)
推荐阅读
- mysql - 从 CSV 加载到 MySQL 表时,MySQL 中的双/十进制工资值的数据截断问题
- ajax - 在从 java 脚本进行 Ajax 调用之前在 Asp.Net Core 中进行模型验证
- c# - 计算 Windows 10 上第 3 方窗口的标题栏按钮的总宽度
- c# - 为什么要绑定列表
到 ListView 文本框不保存更改,尽管双向模式 - reactjs - 错误:一个沉浸式生产者返回了一个新值*并*修改了它的草稿。返回一个新值*或*修改草稿
- javafx - 在 JavaFx 和场景构建器中包含 WebView 组件时出错
- nvidia - 是否可以将 INT8 输入层用于 tensorrt?
- android - 用户交互能否在 OnResume 完成之前触发事件?
- amp-html - 根据地理位置重定向 AMP 页面
- c# - 如何在 Xamarin 中使用 BindingContext