.net所编写的程序集包含两个重要部分:IL(中间语言代码) 和metadata(元数据)。我们编写的代码中不是有很多很多的类吗,类有很多很多的成员,在编译代码的时候,元数据表就根据代码把类的所有信息都记录在了它里面(其实它就是一个数据结构,组织类的信息)。
而反射的过程刚好相反,就是通过元数据里记录的关于类的详细信息找到该类的成员,并能使它“复活”(因为元数据里所记录的信息足够详细,以致于可以根据metadata里面记录的信息找到关于该类的IL code并加以利用)。
最后对比下:
元数据形成:根据代码具体内容形成类的记录信息;
反射:根据元数据的记录找到所需的代码;

先上代码:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using System.Linq;
using System.Reflection; public class reflectModel
{ public static void TestShowReflect()
{
//反射读取类私有属性
Person per = new Person("ismallboy", "");
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[];
par[] = "ismallboy";
par[] = ;
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();
}
}

reflectModel

最新文章

  1. 刷了MIUI的手机在OSX下连接USB调试的方法
  2. 从一个NOI题目再学习二分查找。
  3. Java中Collection和Collections的区别(引用自:http://www.cnblogs.com/dashi/p/3597937.html)
  4. html的input输入框边框
  5. Http协议之Request和Response
  6. .Net文件上传--小数据--un
  7. MongoDB - MongoDB CRUD Operations, Query Documents, Project Fields to Return from Query
  8. The end of other
  9. UICollectionView 集合视图用法,自定义Cell
  10. @produces在spring mvc中是什么意思
  11. chrome devtools
  12. Spark开发指南
  13. Net包管理NuGet(3)搭建私服及引用私服的包
  14. 基于Python的Webservice开发(二)-如何用Spyne开发Webservice
  15. .NET CORE学习笔记系列(4)——ASP.NET CORE 程序启用SSL
  16. LoadRunner监控window系统各项指标详解
  17. 添加依赖:https://mvnrepository.com/
  18. MySQL的时间、日期型
  19. 关于Java单例模式中懒汉式和饿汉式的两种类创建方法
  20. spark-sql用hive表格,在spark-submit运行jar包时遇到的问题

热门文章

  1. 递归删除List元素
  2. 移动端mui常用方法
  3. Html-如何正确给table加边框
  4. css image-set 让浏览器自动切换1x,2x图片
  5. Emacs学习笔记之主模式笔记
  6. PHP判读MySQL是否执行成功
  7. jre1.6下载地址
  8. ROA与SOA概念
  9. linux 文件操作系统调用
  10. IOS算法(二)之选择排序