从一个类中访问另一个类中的私有方法

2023-11-04

一般情况下我们无法在一个类中去访问另外一个类中非公有的方法,但有时候我们确实需要调用另外一个类中的私有方法,该怎么办呢?

有两种方法可以解决,一个是利用反射,另一个就是用委托。

我们可以看个Demo:

 1 namespace ReflectTest
2 {
3 public class TypeAndMethod
4 {
5 public delegate int MyHandler(int x, int y);
6
7 //利用反射
8 public void CallAddByReflect()
9 {
10 TestMethod target = new TestInvokeMethod();
11 Type type = target.GetType();
12 MethodInfo method = type.GetMethod("Add", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
13
14 if (method == null) return;
15
16 object[] args = new object[] { 10, 20 };//方法的参数
17 object result = method.Invoke(target, args);
18
19 Console.WriteLine(result.ToString());
20 }
21
22 //利用委托
23 public void CallAddByDelegate()
24 {
25 TestMethod target = new TestInvokeMethod();
26 Type t1 = typeof(MyHandler);
27 Type t2 = typeof(TestInvokeMethod);
28
29 MyHandler handler1 = (MyHandler)Delegate.CreateDelegate(t1, t2, "Sub");//调用静态方法
30 MyHandler handler2 = (MyHandler)Delegate.CreateDelegate(t1, target, "Add");//调用实例方法
31 int result1 = handler1(1, 2);
32 int result2 = handler2(1, 2);
33 Console.WriteLine(result1.ToString());
34 Console.WriteLine(result2.ToString());
35 }
36 }
37
38 public class TestInvokeMethod : TestMethod
39 {
40 protected override int Add(int x, int y)
41 {
42 return x + y;
43 }
44
45 private static int Sub(int x, int y)
46 {
47 return x - y;
48 }
49 }
50
51 public abstract class TestMethod
52 {
53 protected abstract int Add(int x, int y);
54 }
55 }


 

转载于:https://www.cnblogs.com/chenlinfei/archive/2011/12/11/2283951.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从一个类中访问另一个类中的私有方法 的相关文章

随机推荐

  • 美国地质调查局SRTM--30米DEM数据

    美国地质调查局 USGS SRTM DEM数据 0 简介 1 数据下载 1 1网址 https lpdaac usgs gov https lpdaac usgs gov 1 2搜索 SRTM 以列表展示 选择SRTMGL1 003 1 3
  • 转--Approximate Inference(近似推断,变分推断,KL散度,平均场, Mean Field )

    题目 PRML读书会第十章 Approximate Inference 近似推断 变分推断 KL散度 平均场 Mean Field 转自 http blog csdn net nietzsche2015 article details 43
  • 使用波束搜索的端到端神经网络系统中的上下文语音识别(论文翻译)

    摘要 最近的研究表明 端到端 E2E 语音识别体系结构 如Listen attent和Spell LAS 可以在LVCSR任务中获得最先进的质量结果 这种体系结构的一个优点是它不需要单独训练的发音模型 语言模型和声学模型 但是 这个属性也引
  • Redis 高可用之持久化

    目录 Redis 高可用 Redis 持久化 RDB 持久化 触发条件 执行流程 启动时加载 修改配置文件 AOF 持久化 配置 执行流程 命令追加 append 文件写入 write 和文件同步 sync 文件重写 rewrite 文件重
  • Unity实现一个可扩展的UGUI无限滑动列表控件

    12月20日新增 增加一个可收缩的滑动列表 适用于游戏中的任务系统 成就等 使用说明 创建时需要两个模板slot 一个是button 另一个则是btn下显示的cell 配置如下图添加ExpandableView脚本 新增的IsDefault
  • Python环境配置

    1 python下载 下载地址 https www python org downloads 找到3 10以上的包下载 2 Pycharm下载 Pycharm下载 选择社区版本的下载就够用 3 Pycharm配置Python环境 Proje
  • 华为鸿蒙4本周发布:官方海报大有玄机!告别“人工智障”!

    一年一度的华为开发者大会2023 HDC Together 将于8月4日至8月6日在东莞松山湖举办 相比去年 今年的华为开发者大会足足提前了三个月 而本次大会主角之一无疑是全新国产操作系统鸿蒙4 HarmonyOS 4 官方之前用了三个词来
  • git查看、修改远程仓库地址

    查看 远程仓库 git remote v 修改 git remote set url origin gitUrl 再查看 git remote v 输出已修改过得git仓库地址 即为完成
  • 分布式数据库资料

    Hadoop是很多组件的集合 主要包括但不限于MapReduce HDFS HBase ZooKeeper MapReduce模仿了Google MapReduce HDFS模仿了Google File System HBase模仿了Goo
  • python项目2to3方案预研

    目录 官方工具2to3 工具安装 参数解释 基本使用 工具缺陷 future 工具安装 参数解释 基本使用 工具缺陷 python modernize 工具安装 参数解释 基本使用 工具缺陷 pyupgrade 工具安装 参数解释 基本使用
  • Unity 3D期末大作业--背包系统

    Unity游戏背包系统的实现 一 项目概述 1 功能描述 该部分主要实现了游戏中玩家在个人背包和游戏角色之间切换装备 能够从背包中将装备装到游戏角色上也能够将游戏角色的装备卸下放入背包 卸下装备放入背包 将背包中装备赋给游戏角色 2 实现思
  • 图像阈值分割方法论文与代码【matlab】

    一 算法流程 图像是事物的视觉表现 也是人类接收信息 传递信息的一种重要途径 是人类生活与生产过程中最高效的信息获取与交流的方式之一 图像分割是一种帮助人类获取有效知识的重要方法 其主要是将目标图像处理成多个具有不同性质的区域并提取出对用户
  • base64编码相关-btoa和atob及中文乱码报错问题

    base64编码相关 btoa和atob及中文乱码报错问题 最近在做二进制编码相关的东西 关于Base64的编码解码问题 遇到了一些问题 btoa btoa函数全称就是Binary to ASCII 在js中用于Base64编码 let e
  • 图片处理二--使用OpenCV库实现图片膨胀腐蚀

    1 什么是形态学操作 形态学操作就是基于形状的一系列图像处理操作 通过将结构元素作用于输入图像来产生输出图像 最基本的形态学操作有二 腐蚀与膨胀 Erosion 与 Dilation 他们的运用广泛 消除噪声 分割独立的图像元素 以及连接
  • Maven的介绍及安装

    Maven 什么是Maven 在美国是一个口语化的词 代表专家 内行的意思 一个对Maven比较正式的定义是这么说的 Maven是一个项目管理工具 它包含了一个项目对象模型 POM Project Object Model 一组标准集合 一
  • 基于 Vue 和 SpringBoot 的医院门诊预约挂号系统源代码+数据库

    基于 Vue 和 SpringBoot 的医院门诊预约挂号系统 完整代码下载地址 基于 Vue 和 SpringBoot 的医院门诊预约挂号系统源代码 数据库 软件简介 本软件是 基于 Vue 的医院门诊预约挂号管理系统 主要包含数据中心
  • 故障注入测试(Fault Injection Test)方法

    这周新一篇技术文章来袭 今天要分享的技术文章是 故障注入测试 Fault Injection Test 方法 过去只被归类为机械装置的汽车 现在变成了包括许多电子控制装置在内的尖端产品 最近上市的汽车上基本上都搭载了100个以上的控制器 由
  • 【pycharm】Cannot find reference ‘XXX‘ in ‘__init__.py‘ 解决办法

    Cannot find reference XXX in init py 解决办法 File gt Editor gt Inspections 把Unresolved references的 取消掉
  • C#中实现简单文件读写(附源代码)

    主要代码 using System IO Read File private void button1 Click object sender System EventArgs e try openFileDialog1 Filter tx
  • 从一个类中访问另一个类中的私有方法

    一般情况下我们无法在一个类中去访问另外一个类中非公有的方法 但有时候我们确实需要调用另外一个类中的私有方法 该怎么办呢 有两种方法可以解决 一个是利用反射 另一个就是用委托 我们可以看个Demo 1 namespace ReflectTes