[C#]通过反射访问类私有成员
参考链接:
https://www.cnblogs.com/adodo1/p/4328198.html
代码如下:
using System;
using System.Reflection;
using UnityEngine; public static class ObjectExtension
{
//获取私有字段的值
public static T GetPrivateField<T>(this object instance, string fieldName)
{
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
Type type = instance.GetType();
FieldInfo info = type.GetField(fieldName, flags);
return (T)info.GetValue(instance);
} //设置私有字段的值
public static void SetPrivateField(this object instance, string fieldName, object value)
{
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
Type type = instance.GetType();
FieldInfo info = type.GetField(fieldName, flags);
info.SetValue(instance, value);
} //获取私有属性的值
public static T GetPrivateProperty<T>(this object instance, string propertyName)
{
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
Type type = instance.GetType();
PropertyInfo info = type.GetProperty(propertyName, flags);
return (T)info.GetValue(instance, null);
} //设置私有属性的值
public static void SetPrivateProperty<T>(this object instance, string propertyName, object value)
{
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
Type type = instance.GetType();
PropertyInfo info = type.GetProperty(propertyName, flags);
info.SetValue(instance, value, null);
} //调用私有方法
public static object CallPrivateMethod(this object instance, string methodName, params object[] param)
{
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
Type type = instance.GetType();
MethodInfo info = type.GetMethod(methodName, flags);
return info.Invoke(instance, param);
}
} public class TestReflectionClass {
private int field;
private string Property { get; set; } public TestReflectionClass()
{
field = ;
Property = "a";
} private void SetValue(int field, string property)
{
this.field = field;
this.Property = property;
}
} public class TestReflection : MonoBehaviour { void Start ()
{
TestReflectionClass testClass = new TestReflectionClass(); print(testClass.GetPrivateField<int>("field"));//
print(testClass.GetPrivateProperty<string>("Property"));//a testClass.CallPrivateMethod("SetValue", , "b"); testClass.SetPrivateProperty<string>("Property", "c");
print(testClass.GetPrivateField<int>("field"));//
print(testClass.GetPrivateProperty<string>("Property"));//c
}
}
[C#]通过反射访问类私有成员的更多相关文章
- VC6.0中友元函数无法访问类私有成员的解决办法
举个例子: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #inclu ...
- java利用反射访问类的私有(private)属性及方法
Java语言中,在一个类中,为了不让外界访问到有的属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名)将无法访问此属性与方法,但有没有其他方法可以访问呢?答案是有的 ...
- java反射获取类的成员函数,成员变量,构造函数
package com.imooc.reflect;import javax.sound.midi.Soundbank;import java.lang.reflect.Constructor;imp ...
- [javaSE] 反射-获取类的成员属性和构造方法
成员属性和构造方法皆为对象,通过Class对象的方法可以得到 package com.tsh.reflect; import java.lang.reflect.Constructor; import ...
- Python基础(十二) 类私有成员和保护成员
python中的protected和private python中用 _var :变量名前一个下划线来定义,此变量为保护成员protected,只有类及其子类可以访问.此变量不能通过from XXX ...
- java 反射获取设置私有成员变量的值
for (Object arg:args) { //处理applicationCode Class<?> argClass = arg.getClass(); Field applicat ...
- C++之在类内部访问对象的私有成员
一.引言 今天看项目里的一段代码发现,竟然可以再类的成员函数中访问该类的对象的私有成员.感觉不可思议. 自己写的实例代码: #include <iostream> using namesp ...
- .net 反射访问私有变量和私有方法
以下为本次实践代码: using System; using System.Collections.Generic; using System.ComponentModel; using System ...
- C#中访问私有成员
首先访问一个类的私有成员不是什么好做法.大家都知道私有成员在外部是不能被访问的.一个类中会存在很多私有成员:如私有字段.私有属性.私有方法.对于私有成员造访,可以套用下面这种非常好的方式去解决. pr ...
随机推荐
- mysql二进制日志详解
一.什么是二进制日志 二进制日志主要记录mysql数据库的变化,二进制日志包含所有更新了数据或者潜在更新了数据(如没有匹配到任何行的delete语句),语句以时间的形式保存,描述了数据的更改.二进制日 ...
- Maven install报MojoExecutionException
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5:assembly (m ...
- 阅读<SMPTE 274M-2005 1920X1080>笔记
阅读<SMPTE 274M-2005 1920X1080>笔记 1.1080i blank field 2.blank and active line timing Analog Digi ...
- 使用Vivado的block design
使用Vivado的block design (1)调用ZYNQ7 Processing System (2)配置ZYNQ7系统 (3)外设端口配置 根据开发板原理图MIO48和MIO49配置成了串口通 ...
- 1、Dreamweaver+php开发网站第一步
1.首先在appserv目录下的www中建立一个网站文件夹,例如test 2.在Dreamweaver中的站点下新建站点进行配置,其中站点选项和服务器选项都要配置. 3.然后在Dreamweaver中 ...
- 《JavaScript设计模式与开发》笔记 4.闭包
1.变量的作用域 2.变量的生存周期 3.闭包更多作用 1.封装变量 2.延续局部变量寿命 4.闭包和面向对象设计 5.闭包和内存管理 1.变量的作用域 var func = function(){ ...
- WEKA从sqlite数据库文件导入数据
1.编写代码的方式 只需要在java工程中导入weka.jar和sqlite-jdbc-3.8.7.jar两个jar包, weka.jar可以在weka的安装路径下找到, sqlite-jdbc-3. ...
- Winfrom控件使用
1.Lablelable添加图片,解决图片和字体重叠? Text属性添加足够空格即可,显示效果如下所示: 2.根据窗体名称获取窗体并显示到指定panel? Label item = sender as ...
- WPF Demo17 数据绑定
实例一:以资源的形式实现 namespace 数据绑定1 { public class Student { public int Id { get; set; } public string Name ...
- 跟未名学Office - PPT操作:高效
第二章. PPT操作:高效... 3 第一节 操作视图... 3 第二节 Word草稿... 4 第三节 幻灯片母版... 5 第四节 幻灯片页... 7 第五节 幻灯片排版... 8 第六节 模板. ...