.NET中使用反射访问属性方法
2018-06-18 02:10:35来源:未知 阅读 ()
.net所编写的程序集包含两个重要部分:IL(中间语言代码) 和metadata(元数据)。我们编写的代码中不是有很多很多的类吗,类有很多很多的成员,在编译代码的时候,元数据表就根据代码把类的所有信息都记录在了它里面(其实它就是一个数据结构,组织类的信息)。
而反射的过程刚好相反,就是通过元数据里记录的关于类的详细信息找到该类的成员,并能使它“复活”(因为元数据里所记录的信息足够详细,以致于可以根据metadata里面记录的信息找到关于该类的IL code并加以利用)。
最后对比下:
元数据形成:根据代码具体内容形成类的记录信息;
反射:根据元数据的记录找到所需的代码;
先上代码:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.ComponentModel; 7 using System.Linq; 8 using System.Reflection; 9 10 public class reflectModel 11 { 12 13 public static void TestShowReflect() 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 40 /// <summary> 41 /// 个人信息 42 /// </summary> 43 class Person 44 { 45 private string Name { get; set; } 46 private string StuNo { get; set; } 47 48 public Person(string name, string stuNo) 49 { 50 this.Name = name; 51 this.StuNo = stuNo; 52 } 53 54 private string GetStuInfo() 55 { 56 return this.Name; 57 } 58 59 private string GetValue(string str, int n) 60 { 61 return str + n.ToString(); 62 } 63 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Web基础知识
下一篇:jQuery学习笔记(1)-初探
- C++ 在名称空间中使用using声明和using编译指令 2020-05-29
- 1.ffmpeg、ffplay、ffprobe命令使用 2020-05-11
- 关于使用ffmpeg的一些牢骚 2020-05-08
- G++编译链接的那些事!G++的特殊使用方法[常用] 2020-04-19
- c/c++ 使用valgrind检查内存泄漏 2020-04-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash