咨询区

  • Jeromy Irvine

我的类中有一组私有方法,我现在想根据灵活的输入值来动态调用其中的私有方法,代码类似是这个样子。

MethodInfo dynMethod = this.GetType().GetMethod("Draw_" + itemType);
dynMethod.Invoke(this, new object[] { methodParams });

代码跑起来后,我发现 dynMethod 并没有返回结果,请问我该如何配置才能正确的返回?

回答区

  • cod3monk3y

如果你真的想解决这个问题,个人建议你写个扩展方法,比如下面这样。

static class AccessExtensions
{public static object call(this object o, string methodName, params object[] args){var mi = o.GetType ().GetMethod (methodName, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance );if (mi != null) {return mi.Invoke (o, args);}return null;}
}

然后可以这样使用

class Counter{public int count { get; private set; }void incr(int value) { count += value; }}[Test]public void making_questionable_life_choices(){Counter c = new Counter ();c.call ("incr", 2);             // "incr" is private !c.call ("incr", 3);Assert.AreEqual (5, c.count);}
  • Owen James

微软最近修改了 反射API,在新的反射模式和平台下,大概是这么写的。

obj.GetType().GetTypeInfo().GetDeclaredMethod("MethodName").Invoke(obj, yourArgsHere);

实践中最好还是封装成一个泛型方法,比如下面这样。

public static object InvokeMethod<T>(this T obj, string methodName, params object[] args)
{var type = typeof(T);var method = type.GetTypeInfo().GetDeclaredMethod(methodName);return method.Invoke(obj, args);
}

注意:

  1. 如果你需要调用的方法是在 obj 的基类中,那这里的泛型参数 T 要显式定义为基类。

  2. 如果你需要调用的方法是一个异步方法, 你可以使用 await (Task) obj.InvokeMethod(…)

点评区

确实微软已经优化了各种 反射Api,使用起来虽然较慢,但相比以前要好很多了。

如何通过 反射 调用某个对象的私有方法?相关推荐

  1. 利用java反射调用类的的私有方法

    http://blog.csdn.net/sunyujia/article/details/2501709 今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为在反射看来根 ...

  2. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

  3. Java 反射机制详解:私有方法调用头大?如何通过反射调用类中的私有方法?

    文章目录 前言 一.私有方法在本类中直接调用 1.1.在本类中实例化,调用私有方法 1.2.尝试在其他类直接调用私有方法(错误示范) 二.使用反射实例化类强制调用私有方法 2.1.使用类加载器加载被调 ...

  4. 两个线程调用同一个对象的同一个方法

    两个线程调用同一个对象的同一个方法,会怎么样? public static void main(String[] args) {// System.out.println(String.valueOf ...

  5. java私有方法单元测试_如何通过java反射的方式对java私有方法进行单元测试

    待测试的私有方法: import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.ann ...

  6. 字符串反射调用与字符串同名函数方法且带任意参数的通用封装

    QQ交流群:607330463 GIS开发技术最强交流群   未经允许 禁止转载  可以参考 目录 1 封装的调用代码 2被调用的函数方法 1 封装的调用代码 List<object> o ...

  7. 利用Java反射机制调用类的私有方法

    利用Java反射机制调用类的私有方法 引言 来吧·展示 参考链接 引言 如何调用其他类的私有方法呢? 可以利用Java的反射机制,去调用其他类的私有方法 来吧·展示 package cn.learn. ...

  8. 关于反射调用方法的一个log

    [Loaded sun.reflect.GeneratedMethodAccessor197 from __JVM_DefineClass__]  请问报这个是什么意思? 这是Sun实现的Java标准 ...

  9. 在C++中反射调用.NET(二)

    反射调用返回复杂对象的.NET方法 定义数据接口 上一篇在C++中反射调用.NET(一)中,我们简单的介绍了如何使用C++/CLI并且初步使用了反射调用.NET程序集的简单方法,今天我们看看如何在C+ ...

最新文章

  1. centos amd双显卡_讯景RX590 AMD 50周年纪念版显卡评测
  2. int * * a[10] int * (*a)[10]和 int(*a[10])() 是什么意思
  3. 神策数据受邀参加全国 APP 个人信息保护监管会
  4. jQuery.parseJSON()函数详解
  5. mongodb 入门 启动mongodb 无法启动 问题 非正常关闭
  6. 关于安卓手机访问一些网站或者Fiori应用弹出安装证书的提示
  7. 量子计算机超越传统计算机位数,量子计算机相对于传统的计算机有着怎样的优势?...
  8. springboot-增加自定义资源映射
  9. arcgis缓冲区分析(结合案例)-国家边界缓冲区的建立
  10. springboot+vue+elementUI 校园志愿者管理系统#毕业设计
  11. 星空之翼游戏的设计与实现
  12. 极路由通过SSH添加静态路由表之后无法跳转的问题
  13. 网站数据常见的获取途径有什么
  14. ACL 2021 | 基于词依存信息类型映射记忆神经网络的关系抽取
  15. java png生成webp图片_jpg、png格式的图片转换成webp后颜色失真的问题
  16. 如何提高论文阅读速度?
  17. MacOS下在Pycharm中配置Pyqt5工具(2023年新版教程)
  18. 华为mysql面试题_华为JAVA开发工程师面试经验
  19. Linux三剑客awk之行和列
  20. origin修复中_win10系统中Origin Access出错如何修复

热门文章

  1. 使用Scrapy时出现虽然队列里有很多Request但是却不下载,造成假死状态
  2. CentOS下为Web网站性能做测试
  3. fstream实现文件复制(并将文件名小写改成大写)
  4. Hibernate type 与java 和 数据库类型对应
  5. Excel VBA - Workbook对象
  6. mysql数据库的新特性_【数据库】MySQL新特性归档介绍
  7. epoll监听文件_介绍一下 Android Handler 中的 epoll 机制?
  8. Codeforces 924D Contact ATC (看题解)
  9. 4-8 string
  10. delete在js里为引用删除