.net 反射访问私有变量和私有方法

以下为本次实践代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Linq;
 5 using System.Reflection;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8
 9 namespace ConsoleTest
10 {
11     class Program
12     {
13         static void Main(string[] args)
14         {
15             //反射读取类私有属性
16             Person per = new Person("ismallboy", "20102100104");
17             Type t = per.GetType();
18             //获取私有方法
19             MethodInfo method = t.GetMethod("GetStuInfo", BindingFlags.NonPublic | BindingFlags.Instance);
20             //访问无参数私有方法
21             string strTest = method.Invoke(per, null).ToString();
22             //访问有参数私有方法
23             MethodInfo method2 = t.GetMethod("GetValue", BindingFlags.NonPublic | BindingFlags.Instance);
24             object[] par = new object[2];
25             par[0] = "ismallboy";
26             par[1] = 2;
27             string strTest2 = method2.Invoke(per, par).ToString();
28
29             //获取私有字段
30             PropertyInfo field = t.GetProperty("Name", BindingFlags.NonPublic | BindingFlags.Instance);
31             //访问私有字段值
32             string value = field.GetValue(per).ToString();
33             //设置私有字段值
34             field.SetValue(per, "new Name");
35             value = field.GetValue(per).ToString();
36         }
37     }
38
39     /// <summary>
40     /// 个人信息
41     /// </summary>
42     class Person
43     {
44         private string Name { get; set; }
45         private string StuNo { get; set; }
46
47         public Person(string name, string stuNo)
48         {
49             this.Name = name;
50             this.StuNo = stuNo;
51         }
52
53         private string GetStuInfo()
54         {
55             return this.Name;
56         }
57
58         private string GetValue(string str, int n)
59         {
60             return str + n.ToString();
61         }
62     }
63 }

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

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Linq;
 5 using System.Reflection;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8
 9 namespace ConsoleTest
10 {
11     class Program
12     {
13         static void Main(string[] args)
14         {
15             //反射读取类私有属性
16             dynamic per = new Person("ismallboy", "20102100104");
17             Type t = per.GetType();
18             //获取私有方法
19             MethodInfo method = t.GetMethod("GetStuInfo", BindingFlags.NonPublic | BindingFlags.Instance);
20             //访问无参数私有方法
21             string strTest = method.Invoke(per, null);
22             //访问有参数私有方法
23             MethodInfo method2 = t.GetMethod("GetValue", BindingFlags.NonPublic | BindingFlags.Instance);
24             object[] par = new object[2];
25             par[0] = "ismallboy";
26             par[1] = 2;
27             string strTest2 = method2.Invoke(per, par);
28
29             //获取私有字段
30             PropertyInfo field = t.GetProperty("Name", BindingFlags.NonPublic | BindingFlags.Instance);
31             //访问私有字段值
32             string value = field.GetValue(per);
33             //设置私有字段值
34             field.SetValue(per, "new Name");
35             value = field.GetValue(per);
36         }
37     }
38
39     /// <summary>
40     /// 个人信息
41     /// </summary>
42     class Person
43     {
44         private string Name { get; set; }
45         private string StuNo { get; set; }
46
47         public Person(string name, string stuNo)
48         {
49             this.Name = name;
50             this.StuNo = stuNo;
51         }
52
53         private string GetStuInfo()
54         {
55             return this.Name;
56         }
57
58         private string GetValue(string str, int n)
59         {
60             return str + n.ToString();
61         }
62     }
63 }
时间: 02-27

.net 反射访问私有变量和私有方法的相关文章

javascript在私有作用域中定义私有变量和私有函数 (1)

javascript没有私有成员,但是有私有变量,所有对戏那个属性都是公有的 任何在函数中定义的变量,都可以认为是私有变量,因为函数内部不能访问. 私有变量包括:函数的参数.局部变量.函数内部定义的其他函数 - 在私有作用域中定义私有变量和私有函数 function MyObject(){ //私有变量和私有函数 var privateVariable=10; function privateFunction(params) { return false } //特权方法----有权访问私有变量

7.4 私有变量

严格来讲,JavaScript并没有什么私有变量的概念,但是从作用域的角度来看,一个是全局,函数: 在函数中定义的变量都可以称之为 私有变量:因为不能在函数外部访问: 1 function add(num1,num2){ 2 var sum = num1 + num2; 3 return sum; 4 } 上面代码完成两个数字累加,函数内部声明三个私有变量,num1, num2, sum. 在函数内部可以访问这几个变量,但函数外部则不能访问它们. 如果在这个函数内部创建一个闭包,那么闭包通过自己

私有变量

严格来讲,Javascript中没有私有成员的概念:所有对象属性都是公有的.不过,倒是有一个私有变量的概念.任何在函数中定义的变量,都可以认为是私有变量,因为不能再函数的外部访问这些变量.私有变量包括函数的参数.局部变量和在函数内部定义的其他函数.来看下面的例子: function add(num1,num2){ var sum = sum1 + sum2; return sum; } 在这个函数内部,有三个私有变量:num1.num2和sum.在函数内部可以访问这个变量,但在函数外部则不能访问

JS 函数(6)—私有变量

私有变量 私有变量 任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量. 私有变量包括函数的参数.局部变量和在函数中定义的其它函数. 特权方法:有权访问私有变量和私有函数的方法. 有两种在对象上创建特权方法的方式:其一是在构造函数中定义特权方法. 1 function MyObject() { 2 //私有变量和私有函数 3 var privateVariable = 10; 4 function privateFunction() { 5 return true;

Javascript的私有变量和方法、共有变量和方法以及特权方法、构造器、静态共有属性和静态共有方法

一.私有变量:定义在函数内部的属性和方法称之为该函数的私有属性和方法        共有变量:在函数内部通过this创建的对象和方法称之为该函数的共有属性和方法 特权方法:通过this创建的既可以访问该函数的共有属性和方法,也可以访问该函数的私有属性和方法称之为特权方法 构造器:对象在创建的时候调用特权方法来初始化实例的属性,这个方法也称为构造器 /** * 类的内部私有属性.私有方法.特权方法.共有属性和共有方法以及构造器 * @param id * @param bookname * @pa

四.OC基础--1.文档安装和方法重载,2.self和super&amp;static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&amp;私有方法,6.description方法

四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 3. 方法重载: 是指在一个类中定义多个同名的方法 在OC中没有重载 2.self和super&static, self和super: 1. self理解: 谁调用当前方法, self就代表谁. 比如: 在对象方法中,self代表的是对象, 因为只有对象才可以调用对象方法 在类方法中, self代表的

iOS动态性 运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)

借助前辈的力量综合一下资料. OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法.利用runtime机制让我们可以在程序运行时动态修改类.对象中的所有属性.方法,就算是私有方法以及私有属性都是可以动态修改的.本文旨在对runtime的部分特性小试牛刀,更多更全的方法可以参考系统API文件<objc/runtime.h>,demo例子可以参见CSDN的runtime高级编程系列文章. 我们出发吧! 先看一个非常平常的Father类: #import <Fou

iOS s私有变量 私有方法

实例变量既可以在@interface中定义 也可以在@implementation中定义 在@implementation中的成员变量默认是私有的成员变量 并且和利用@private修饰的不太一样 在@implementation中定义的成员变量在其他类中无法查看 也无法访问 在@implementation中定义的私有变量只能在本类中访问 如果只有方法的实现没有方法的声明 这个方法就是私有方法

js模拟的静态私有变量

Javascript静态变量与实例变量 博客分类: JavaScript 严格的来讲,js里面并没有静态与私有的概念,所有成员属性都是公开的,下面只是参考OO语言,通过某种方式来实现类似的概念. 一.静态变量 1.私有静态变量 所有实例共享.因为是私有的变量,所以不能通过函数名直接访问.通过闭包来实现. 根据闭包的作用域原理,只能在闭包内部访问.所以,并不是类的任何地方都可以访问这个静态变量.只有类的构造函数或者方法(原型方法),在闭包内部才可以访问. Js代码   (function(){ v

通过指针访问C++对象的私有成员

C++对象的私有成员是禁止类外的访问的.但是我们仍然可以通过指针访问C++对象的私有成员. #include <iostream> using namespace std; class A { public: A(int i = 0) :m_i(i) {} void print() { cout << "m_i" << this->m_i << endl; } private: int m_i; }; int main(int ar