zoukankan      html  css  js  c++  java
  • .net 反射访问私有变量和私有方法

    以下为本次实践代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                //反射读取类私有属性
                Person per = new Person("ismallboy", "20102100104");
                Type t = per.GetType();
                //获取私有方法
                MethodInfo method = t.GetMethod("GetStuInfo", BindingFlags.NonPublic | BindingFlags.Instance);
                //访问无参数私有方法
                string strTest = method.Invoke(per, null).ToString();
                //访问有参数私有方法
                MethodInfo method2 = t.GetMethod("GetValue", BindingFlags.NonPublic | BindingFlags.Instance);
                object[] par = new object[2];
                par[0] = "ismallboy";
                par[1] = 2;
                string strTest2 = method2.Invoke(per, par).ToString();
    
                //获取私有字段
                PropertyInfo field = t.GetProperty("Name", BindingFlags.NonPublic | BindingFlags.Instance);
                //访问私有字段值
                string value = field.GetValue(per).ToString();
                //设置私有字段值
                field.SetValue(per, "new Name");
                value = field.GetValue(per).ToString();
            }
        }
    
        /// <summary>
        /// 个人信息
        /// </summary>
        class Person
        {
            private string Name { get; set; }
            private string StuNo { get; set; }
    
            public Person(string name, string stuNo)
            {
                this.Name = name;
                this.StuNo = stuNo;
            }
    
            private string GetStuInfo()
            {
                return this.Name;
            }
    
            private string GetValue(string str, int n)
            {
                return str + n.ToString();
            }
        }
    }

    如果使用dynamic的话,也可以如下:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                //反射读取类私有属性
                dynamic per = new Person("ismallboy", "20102100104");
                Type t = per.GetType();
                //获取私有方法
                MethodInfo method = t.GetMethod("GetStuInfo", BindingFlags.NonPublic | BindingFlags.Instance);
                //访问无参数私有方法
                string strTest = method.Invoke(per, null);
                //访问有参数私有方法
                MethodInfo method2 = t.GetMethod("GetValue", BindingFlags.NonPublic | BindingFlags.Instance);
                object[] par = new object[2];
                par[0] = "ismallboy";
                par[1] = 2;
                string strTest2 = method2.Invoke(per, par);
    
                //获取私有字段
                PropertyInfo field = t.GetProperty("Name", BindingFlags.NonPublic | BindingFlags.Instance);
                //访问私有字段值
                string value = field.GetValue(per);
                //设置私有字段值
                field.SetValue(per, "new Name");
                value = field.GetValue(per);
            }
        }
    
        /// <summary>
        /// 个人信息
        /// </summary>
        class Person
        {
            private string Name { get; set; }
            private string StuNo { get; set; }
    
            public Person(string name, string stuNo)
            {
                this.Name = name;
                this.StuNo = stuNo;
            }
    
            private string GetStuInfo()
            {
                return this.Name;
            }
    
            private string GetValue(string str, int n)
            {
                return str + n.ToString();
            }
        }
    }

     

    以上图片由“图斗罗”提供

  • 相关阅读:
    [转]调试winlogon
    [转]整理一份我对Windows文件系统过滤驱动的sFilter工程代码的详细说明
    [转]在内核调试会话中设置用户态断点
    用Windbg调试GINA
    [转]文件过滤驱动开发
    [转]NDIS中间层驱动开发在Win7系统下和Windows XP系统下的区别
    [转]windbg下在kd模式也可以调试用户模式程序
    ProgressDialog多了一个外边框
    Dx trouble processing "java/nio/CharBuffer.class":
    ImageView图片重叠问题
  • 原文地址:https://www.cnblogs.com/ldyblogs/p/net.html
Copyright © 2011-2022 走看看