前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET/C# 使用反射调用含 ref 或 out 参数的方法

.NET/C# 使用反射调用含 ref 或 out 参数的方法

作者头像
walterlv
发布2018-09-18 11:29:16
2.1K0
发布2018-09-18 11:29:16
举报
文章被收录于专栏:walterlv - 吕毅的博客

.NET/C# 使用反射调用含 ref 或 out 参数的方法

2018-09-02 06:59

使用反射,我们可以很容易地在运行时调用一些编译时无法确定的属性、方法等。然而,如果方法的参数中包含 refout 关键字的时候,又该怎么调用呢?

本文将介绍如何反射调用含 refout 关键字的方法。


比如我们有这样的类型:

代码语言:javascript
复制
public class Walterlv
{
    public string Get(string key)
    {
    }
}

那么反射的时候可以使用:

代码语言:javascript
复制
var walterlv = new Walterlv();
var value = (string) typeof(Walterlv).GetMethod("Get").Invoke(walterlv, new object[] { "key" });

然而现在我们的函数是这样的,带一个 out 关键字的参数:

代码语言:javascript
复制
public class Walterlv
{
    public bool TryGet(string key, out string value)
    {
    }
}

事实上,无论是什么样的方法,在反射式调用的都是同一个方法,即 Invoke

对于 outref 关键字的方法来说,会更新传入的数组,也就是 Invoke 最后传入的那个参数。所以其实我们只需要保存那个数组的实例,在调用完毕之后便能重新取出被修改的参数了。

代码语言:javascript
复制
var walterlv = new Walterlv();
var args = new object[] { "key", null };
var value = (string) typeof(Walterlv).GetMethod("Get").Invoke(walterlv, args);
// 在这里可以从 args 里面取出被 ref 或者 out 修改的参数。

参考资料

本文会经常更新,请阅读原文: https://walterlv.com/post/handle-ref-or-out-arguments-using-reflection.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (walter.lv@qq.com)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档