.NET/C# 使用反射调用含 ref 或 out 参数的方法
使用反射,我们可以很容易地在运行时调用一些编译时无法确定的属性、方法等。然而,如果方法的参数中包含 ref 或 out 关键字的时候,又该怎么调用呢?
本文将介绍如何反射调用含 ref 或 out 关键字的方法。
比如我们有这样的类型:
public class Walterlv
{
    public string Get(string key)
    {
    }
}
那么反射的时候可以使用:
var walterlv = new Walterlv();
var value = (string) typeof(Walterlv).GetMethod("Get").Invoke(walterlv, new object[] { "key" });
然而现在我们的函数是这样的,带一个 out 关键字的参数:
public class Walterlv
{
    public bool TryGet(string key, out string value)
    {
    }
}
事实上,无论是什么样的方法,在反射式调用的都是同一个方法,即 Invoke。
对于 out 和 ref 关键字的方法来说,会更新传入的数组,也就是 Invoke 最后传入的那个参数。所以其实我们只需要保存那个数组的实例,在调用完毕之后便能重新取出被修改的参数了。
var walterlv = new Walterlv();
var args = new object[] { "key", null };
var value = (string) typeof(Walterlv).GetMethod("Get").Invoke(walterlv, args);
// 在这里可以从 args 里面取出被 ref 或者 out 修改的参数。
参考资料
- out, ref and InvokeMember !!! - CodeProject
 - c# - How to pass a parameter as a reference with MethodInfo.Invoke - Stack Overflow
 
.NET/C# 使用反射调用含 ref 或 out 参数的方法的更多相关文章
- C#如何通过反射调用带有ref或者out的参数的方法
		
写这篇博客,原起今天CyljXu问我一个问题:如何通过反射调用带有ref或者out的参数的方法?想着可能其他人也会遇到这个问题,权且记录下来,以备后行者搜索到. 这个在MSDN上有解释,参考 Meth ...
 - 反射调用 java bean的set和get方法
		
一.使用java.beans.PropertyDescriptor import java.beans.IntrospectionException; import java.beans.Proper ...
 - C# 反射调用私有事件
		
原文:C# 反射调用私有事件 在 C# 反射调用私有事件经常会不知道如何写,本文告诉大家如何调用 假设有 A 类的代码定义了一个私有的事件 class A { private event EventH ...
 - 2019-11-29-C#-反射调用私有事件
		
原文:2019-11-29-C#-反射调用私有事件 title author date CreateTime categories C# 反射调用私有事件 lindexi 2019-11-29 08: ...
 - 2019-8-30-C#-反射调用私有事件
		
title author date CreateTime categories C# 反射调用私有事件 lindexi 2019-08-30 08:52:57 +0800 2018-09-19 20: ...
 - 在C++中反射调用.NET(三)
		
在.NET与C++之间传输集合数据 上一篇<在C++中反射调用.NET(二)>中,我们尝试了反射调用一个返回DTO对象的.NET方法,今天来看看如何在.NET与C++之间传输集合数据. 使 ...
 - C#,动态加载DLL,通过反射,调用参数,方法,窗体
		
.net中常会用到动态加载DLL,而DLL中可能包含各种参数.方法.窗体,如何来调用动态加载这些参数.方法.窗体呢? 在C#中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系: System. ...
 - [C#]浅析ref、out参数
		
转载:http://www.cnblogs.com/vd630/p/4601919.html#top 按引用传递的参数算是C#与很多其他语言相比的一大特色,想要深入理解这一概念应该说不是一件容易的事, ...
 - 利用反射调用方法时,处理ref,out参数需要注意的问题(转)
		
转自:http://www.68idc.cn/help/buildlang/ask/20150318283817.html 项目中如下的泛型方法,因为要在运行时,动态指定类型参数,所以要利用反射来实现 ...
 
随机推荐
- 安装WIN7时提示“缺少所需的CD/DVD驱动器设备驱动程序”
			
同事机器重装Win7,先百度了一下不适合64bit,于是直接上32bit系统. BOIS设置DVD启动,把安装盘放在移动光驱里,开始安装. 在安装时出现下图错误:“缺少所需的CD/DVD驱动器设备驱动 ...
 - 1linux的基本命令
			
查看命令的帮助信息man 命令名 文件操作touch 建立文件 (对于已存在文件,更新时间)cat 查看文件 (-n 自动加上行号)rm 删除文件cp 拷贝文件mv 移动/重命名文件more 分页查看 ...
 - ZOJ 3747 Attack on Titans
			
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3747 题意: 现在有n个士兵进行排序,只有G.R.P三种士兵,要求至少有m ...
 - Flutter基础Widget之按钮(RaisedButton、FlatButton、OutlineButton,IconButton)
			
Flutter中给我们预先定义好了一些按钮控件给我们用,常用的按钮如下 RaisedButton :凸起的按钮,其实就是Android中的Material Design风格的Button ,继承自Ma ...
 - Rails 5 Test Prescriptions  第3章Test-Driven Rails
			
本章,你将扩大你的模型测试,测试整个Rails栈的逻辑(从请求到回复,使用端到端测试). 使用Capybara来帮助写end-to-end 测试. 好的测试风格,包括端到端测试,大量目标明确的单元测试 ...
 - hdu2149巴什博弈输出
			
一眼就能看出来的巴什博弈,只是要输出第一步取的值,如果m>n+1,输出m%(n+1),否则输出m到n,因为这是第一步 #include<map> #include<set> ...
 - rabbitmq 对多服务器p2p模式配置的一个测试
			
一直对rabbitmq p2p 模式的多服务器下做相同配置的 各个服务器数据接受情况比较好奇 今天有空测试了下 xml 文件 <?xml version="1.0" enco ...
 - bzoj1075
			
题意: 给你一个地图,问从x1,y1->x2,y2,要走的路最短,问 耗油和速度 题解: 首先把他们转到左下角->右上角 然后只能往上或往下 考虑到可能有小数 所以都乘上他们的公倍数 然后 ...
 - cdq分治的小结
			
cdq分治 是一种特殊的分治 他的思想: 1.分治l,mid 2.分治mid+1,r 3.计算l,mid对mid+1,r的影响 3就是最关键的地方 这也是cdq的关键点 想到了这一步基本就可以做了 接 ...
 - bzoj2631
			
题解: lct+链上修改 每一次修改的时候记录lazy标记 如果有了乘法,加法的lazy标记也要相应的随之变化 代码: #pragma GCC optimize(2) #include<bits ...