福建漳州网站建设价格,国内做网站网站,浙江高端建设网站,端午节网站建设目的一、前言反射#xff08;Reflection#xff09;的内容在博客中已经写了一篇#xff0c;什么是反射#xff0c;反射的使用#xff0c;反射优缺点总结#xff1b;在面试中突然被问道反射的原理#xff0c;按照理解反射就是在Reflection命名空间和对象的Type对象获取类的方…一、前言 反射Reflection的内容在博客中已经写了一篇什么是反射反射的使用反射优缺点总结在面试中突然被问道反射的原理按照理解反射就是在Reflection命名空间和对象的Type对象获取类的方法、属性、特性等成员信息但是又被问道为什么可以获取这些成员信息就是反射机制依据的是什么让其可以使用反射来获取程序集、程序集的类、创建对象、执行方法、获取属性和特性信息。 本篇文章就是要讲述清楚反射是怎么或者说如何获取程序信息二、内容 反射是如何通过如下的Reflection命名空间的类与方法获取获取类方法名命名空间描述System.Reflection.Assembly程序集System.Reflection.MemberInfo成员信息System.Reflection.EventInfo事件System.Reflection.FieldInfo字段System.Reflection.MethodBase基类方法System.Reflection.ConstructorInfo构造函数System.Reflection.MethodInfo方法System.Reflection.PropertyInfo属性System.Type类、对象的类型对象 主要依据了元数据metadata在程序高级语言中C#元数据的表现形式是一种二进制信息用以对存储在公共语言运行库可移动执行文件PE或者存储在内存中程序进行描述编译器將代码编译成PE文件时便会將元数据插入到该文件的一部分而将代码转换为 Microsoft 中间语言 (MSIL) 并将其插入到该文件的另一部分中所以包含元数据和使用中间语言將代码生成的部分。元数据將存储如下信息程序集名称、版本、区域性、公钥、类的说明名称、可见性、基类和实现的接口、类的成员方法、字段、属性、事件、嵌套的类型等。当执行代码的时候运行库將元数据加载到内存中并通过引用它元数据来发现有关代码的类、成员、继承等信息。 反射则是审查元数据并收集关于它的类型信息的能力元数据编译后的最基本数据单元一些表当编译程序集货模块时编译器会创建如下信息。1、关于程序集的元数据清单主要包含如下信息标识信息包括程序集的名称、版本、文化和公钥等文件列表程序集由哪些文件组成引用程序集列表该程序集所引用的其他程序集一组许可请求运行这个程序集需要的许可。2、关于类型的元数据包含一个类定义表、一个字段定义表、一个方法定义表、方法参数表等System.reflection命名空间包含的几个类允许你反射解析这些元数据表的代码 。三、总结 通过面试被问到反射的原理基于目前知识面只是知道反射是什么怎么使用的因为这件事情促使进一步深究了解到程序集元数据的内容了解到反射实现机制。从而对整个知识串联起来形成一个体系融会贯通。所以技术的学习过程是一个深入探究的过程形成体系的过程慢慢就会融会贯通了。