程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> .net 反射訪問私有變量和私有方法,.net變量

.net 反射訪問私有變量和私有方法,.net變量

編輯:C#入門知識

.net 反射訪問私有變量和私有方法,.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 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved