精华内容
下载资源
问答
  • 获取反射的三种方式 Student stu = new Student(); Type type = typeof(Student); Type type = stu.GetType(); Type type = Type.GetType(); // 注意该方法有具体的使用规则 BindingFlags 用于限制获取成员...

    获取反射的三种方式

       Student stu = new Student();
            
       Type type = typeof(Student);
       Type type = stu.GetType(); 
       Type type = Type.GetType(); // 注意该方法有具体的使用规则
    

    BindingFlags

    用于限制获取成员的类型,不写的话只能查找到公共成员。一般BindingFlags.InstanceBindingFlags.Static必要有一个,是静态成员就用BindingFlags.Static,是实例成员就用BindingFlags.Instance,也可以两者都写。注意:BindingFlags.NonPublic用于获取非公共成员

    代码

    using System;
    using System.Reflection;
    using UnityEngine;
    
    public class ReflectionTest : MonoBehaviour
    {
        class Student
        {
            public string Name; // 公共字段
            private int Age = 10; // 私有字段
            protected int Score { get; set; } = 80; // 非公共属性
    
            protected void GoHome() // 非公共方法
            {
                Debug.Log(Age + "岁的" + Name + "回家了");
            }
            public void GoToSchool() // 公共方法
            {
                Debug.Log(Age + "岁的" + Name + "上学去了");
            }
        }
        public void Awake()
        {
            Student stu = new Student() { Name = "Tom"};
            Type type = typeof(Student);
            // 获取私有方法
            MethodInfo methodInfo = type.GetMethod("GoHome", BindingFlags.Instance | BindingFlags.NonPublic); // 后面的BindingFlags用于限制查找方法的类型,默认不写的话只能查找到公共方法
            methodInfo.Invoke(stu, null);
            // 获取私有字段
            FieldInfo fieldInfo = type.GetField("Age", BindingFlags.Instance | BindingFlags.NonPublic);
            Debug.Log(fieldInfo.Name + ":" + fieldInfo.GetValue(stu));
            // 获取私有属性
            PropertyInfo propertyInfo = type.GetProperty("Score", BindingFlags.Instance | BindingFlags.NonPublic);
            Debug.Log(propertyInfo.Name + ":" + propertyInfo.GetValue(stu));
            // 通过反射创建对象
            Student stu2 = Activator.CreateInstance(type) as Student;
            stu2.Name = "Jake";
            stu2.GoToSchool();
        }
    }
    
    展开全文
  • 获取到对象的私有字段Field后,然后设定 setAccessible 为true,然后调用字段的get方法,就可以获取到对象的数据了,同时也可以通过反射的方法获取字段的get和set方法来获取需要修改的字段 /* * @version $Id$ * ...

    获取到对象的私有字段Field后,然后设定 setAccessible 为true,然后调用字段的get方法,就可以获取到对象的数据了,同时也可以通过反射的方法获取字段的get和set方法来获取需要修改的字段

    /* * @version $Id$ * * Copyright (c) 2009-2010 yellowcong */
    package com.yellowcong.dao;
    
    import java.lang.reflect.Field;
    
    import jp.co.bsnnet.sofia.dto.keiyaku.wfgm1000.Wfgm1070FormCtlDto;
    import jp.co.bsnnet.sofia.utils.CtlField;
    
    import org.json.simple.JSONObject;
    
    /** * UserTest。 * * * * @version $Id$ */
    public class CopyOfUserTest {
    
        public static void main(String [] args) throws Exception, SecurityException{
            JSONObject obj = new JSONObject();
            Wfgm1070FormCtlDto dto = new Wfgm1070FormCtlDto();
            dto.getGrdKngaku1().setDisable(true);
            dto.getGrdKngaku1().setDefaultValue("doubi");
    
            //通过获取到字段,然后设定 setAccessible 为true,就可以访问私有变量了
            Field field = Wfgm1070FormCtlDto.class.getDeclaredField("grdKngaku1");
            field.setAccessible(true);
    
            CtlField myfile =  (CtlField)field.get(dto);
    
            System.out.println(myfile.isDisable()+myfile.getDefaultValue());
    
    
            //通过set和get方法来设定值
            CtlField myfile2=  (CtlField)Wfgm1070FormCtlDto.class.getMethod("getGrdKngaku1", null).invoke(dto, null);
            System.out.println(myfile2.isDisable()+myfile2.getDefaultValue());
        }
    }
    

    转载于:https://my.oschina.net/u/1987703/blog/1617656

    展开全文
  • 1反射机制的概述和字节码对象的获取方式: 在运行时,我们可以获取任意一个类的所有方法和属性 在运行时,让我们调用任意一个对象的所有方法和属性 反射的前提:要获取类的对象(Class对象)字节码对象 第一种:...

    1反射机制的概述和字节码对象的获取方式:

    在运行时,我们可以获取任意一个类的所有方法和属性

    在运行时,让我们调用任意一个对象的所有方法和属性

    反射的前提:要获取类的对象(Class对象)字节码对象

    第一种:创建对象,对象.getClass();获取

    第二种:可以通过类名获取字节码对象:class  cla = student.class

    第三种:Static class = forName(String  className);通过类的全名获得字节码对象,

    Class.forName(类地址的全名称)

     

    2通过反射获取构造方法并使用:

    获取构造可以创建对象;

    字节码对象.getConstructors();获取所有的public修饰的构造方法  返回的是数组

     字节码对象.getConstructor();不给参数是获得无参构造

    无参构造。newInstance();  ,输出的是成员变量

    带参构造。newInstance(给出参数就行);

    字节码对象。getDeclaredConstructor(参数的类型1,参数的类型2获取成员变量带参的构造方法

    字节码对象。newInstance();获取构造对象

    3通过反射获取成员变量并使用:

    Fileld【】 fs = 字节码对象。getFields();获取所有的public修饰的成员变量

    Filed  fs2 = 字节码对象。getFieldString);获取public修饰的成员变量(根据字段的名称获取公共的成员变量对象)

     

    Filed  fs3 = 字节码对象。getDeclaredFields();获取所有的成员变量

    Filed 的方法get(对象)  通过对象获取成员变量的值

     set(对象,修改的值); 通过成员变量对象,修改为指定的值

    4 通过反射获取私有成员变量并使用:

    字段对象(私有成员变量).setAccessibletrue);//ture)就是设置反射时取消Java的访问检查,(暴力访问)

     

    5通过反射获取成员方法并使用:

    getMethod(类的全名,方法对应的参数名)。没有参数时,方法对应的参数不写就行

    Object  obj = Invoke(对象,参数名);

    展开全文
  • public static T GetPrivateProperty(this object instance, string propertyname) { BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic; Type type = instance
            public static T GetPrivateProperty<T>(this object instance, string propertyname)
            {
                BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic;
                Type type = instance.GetType();
                PropertyInfo field = type.GetProperty(propertyname, flag);
                return (T)field.GetValue(instance, null);
            }
    
            public static T GetPrivateField<T>(this object instance, string fieldname)
            {
                BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic;
                Type type = instance.GetType();
                FieldInfo field = type.GetField(fieldname, flag);
                return (T)field.GetValue(instance);
            }

    展开全文
  • 第一环节:(setAccessible()方法) 1、当isAccessible()的结果是false时,不允许通过...所以我们在通过反射访问某类的私有成员方法和变量的时候,f.setAccessible(true)设置为true的作用就是让我们在用反射时能够访...
  • C#反射访问私有成员

    2018-08-15 22:59:54
    using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text;...using System.Threading.Tasks;...namespace _04反射获取私有成员 { class Program { s...
  • Java的反射工具很强大,有句著名的话:No reflection ,no frameworks.纳整理一个小工具类:/** * @Author 落叶飞翔的蜗牛 * @Date 2018/3/10 * @Description ... * 获取私有成员变量的值 * @param instanc...
  • // 获取字节码对象 Class clazz = Class.forName(... // 创建学生对象 Object stu = clazz.newInstance(); // 暴力反射获取方法 Method method = clazz.getDeclaredMethod("method"); // ...
  • Android 反射获取私有方法,成员变量

    千次阅读 2017-09-27 10:12:48
    public class AppInfo { private String mAppName; public String getAppName() { return mAppName; } ...//从对象中获取成员变量值 //field.getInt(obj),field.getBoolean(obj).... }
  • //获取所有的构造方法返回一个数组 还有getDeclaredConstruct(Class&lt;T&gt; class...)用于获取特定的构造方法con.newInstance(Object...);//若权限是private是不能直接执行的Construc...
  • 通过反射获取父类私有成员变量

    千次阅读 2019-09-19 10:19:19
    import jdk . nashorn . internal . ir . Expression ...// 获取当前对象的所有属性字段 ...// getFields():获取public修饰的字段 ...// getDeclaredFields()获取...DeBug看一下f中的数据 类中的所有成员变量都已经拿到;
  • c# 通过反射获取私有方法 https://www.cnblogs.com/han1982/p/4874302.html class Program { static void Main(string[] args) { //通过反射来调私有的成员 Type type = typeof(Person); ...
  • 反射获取私有属性

    2020-09-14 14:34:53
    类.class.getDeclaredFields()方法,获取类的所有public、private成员属性变量; 2. field[index].setAccessible(true),将私有属性变量设置为可访问的(打破了私有不可访问的规则); 2.1. field[index].get(类...
  • MyClass myClass = new MyClass(); for(Field field : Test.class.getDeclaredFields()){ try { System.out.println(field.get(myClass)); } catch (IllegalArgumentException e) { // TOD...
  • Java的反射工具很强大,有句著名的话:No reflection ,no frameworks. 纳整理一个小工具类: /** * @Author 落叶飞翔的蜗牛 ... * 获取私有成员变量的值 * @param instance * @param filedName * @return */
  • 通过getDeclaredField方法获取私有字段 通过setAccessible让jvm不检查权限 通过set方法设置对象为具体的值1.1.2 案例代码 package com.itheima_01; import java.lang.reflect.Field; /* ...
  • java中反射操作私有成员变量

    千次阅读 2017-06-09 11:58:00
    java中反射操作私有成员变量 反射private成员变量(字段) 反射private属性执行流程 1. 获取学生类字节码对象 2. 获取学生对象 3. 通过getDeclaredField方法获取私有字段 4. 通过...
  • for (Object arg:args) { //处理applicationCode Class<?> argClass = arg.getClass(); Field applicationCode =null; try { app...
  • java代码中,常常将一个类的成员变量置为private 在类的外面获取此类的私有成员变量的value时 f.setAccessible(true);//AccessibleTest类中的成员变量为private,故必须进行此操作
  • 通过反射获取私有内部类对象

    千次阅读 2018-05-10 19:05:24
    首先是我们的目标对象: class Out { ... //内部类的私有成员属性 private String inner = "ccc"; } } 直接列出代码: public class Main { @SuppressWarnings({ "rawtype...
  • //动态链接库中ClsPublic类有一变量 private static string key="1111... //下面通过反射的技术修改和获取值 //设置key public static void updatePalmKey(string key = "test") { BindingFlags flag = BindingFlags.
  • 代码如下: public class Outer { ... //创建成员内部类的私有方法 private void study(){ System.out.println("私有内部类的私有方法执行!"); } private int age = 10; } public Inner getInner(){
  • 反射调用私有方法

    2019-01-28 18:08:01
    using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks;...namespace 反射获取私有成员 { class Program { stati...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 472
精华内容 188
关键字:

反射获取私有成员