.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 项目中如下的泛型方法,因为要在运行时,动态指定类型参数,所以要利用反射来实现 ...
随机推荐
- appscan 9.0.3.10 版本下载
http://download4.boulder.ibm.com/sar/CMA/RAA/07ukf/0/ 其他版本下载 https://www.cnblogs.com/hua198/p/100447 ...
- 20155201 实验三《Java面向对象程序设计》实验报告
20155201 实验三<Java面向对象程序设计>实验报告 一.实验内容 XP基础 XP核心实践 相关工具 二.实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门 ...
- Cooperation.GTST团队第三周项目总结
项目进展 这周我们仍然在学习使用博客园的相关接口,页面的一个基本模块已经搭建出来了,但是页面整体效果还没有完全做出来.另外,我们在使用其他的APP时留意到许多APP都使用上拉加载和下拉刷新的效果,所以 ...
- DirectX9.0c SDK学习笔记(一)
Direct9.0c SDK中提供了一个叫DXviewer的*.x格式文件查看器的源码,代码给出了基于DXUT框架的模型显示接口使用方法, 对于我想编写一个动作捕捉的上位程序是大有助益的. 我的想法是 ...
- RabbitMQ 流程以及一些命令
流程: producer&Consumer producer指的是消息生产者,consumer消息的消费者. Queue 消息队列,提供了FIFO的处理机制,具有缓存消息的能力.rabbitm ...
- NIO概述及实例(时钟服务器)
NIO,非阻塞IO,重点是非阻塞而不是异步! NIO的一般实现如下: package com.pt.nio; import java.net.InetSocketAddress; import jav ...
- 【转载】解决telnet无法连接 Connection refused
原文:解决telnet无法连接 Connection refused telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.它为用户提供了在本地计算机上完成 ...
- [BZOJ1257][CQOI2007]余数之和
题目大意 给你 \(n, k\),计算 $ \sum_{i=1}^n k \bmod i$ 解析 注意到 $ k\bmod i=k-[k/i] \times i$ 则上式等于 $ n \times k ...
- HDU 6038 Function(思维+寻找循环节)
http://acm.hdu.edu.cn/showproblem.php?pid=6038 题意:给出两个序列,一个是0~n-1的排列a,另一个是0~m-1的排列b,现在求满足的f的个数. 思路: ...
- linux挂载windows共享文件夹出错,提示mount error(13): Permission denied
完整的可以工作的命令行: mount -v -t cifs -o username=clouder,password=123456,iocharset=utf8,sec=ntlm //172.28.1 ...