.NET中反射机制的使用与分析

.NET反射的定义:审查元数据并收集关于它的类型信息的能力。

元数据是一种二进制信息,用以对存储在公共语言运行库可移植可执行文件 (PE) 文件或存储在内存 中的程序进行描述。将您的代码编译为 PE 文件时,便会将元数据插入到该文件的一部分中。

而将代码转换为 Microsoft 中间语言 (MSIL) 并将其插入到该文件的另一部分中。在模块或程序集中 定义和引用的每个类型和成员都将在元数据中进行说明。

当执行代码时,运行库将元数据加载到内存中,并引用它来发现有关代码的类、成员、继承等信息。

元数据以非特定语言的方式描述在代码中定义的每一类型和成员。元数据存储以下信息:

程序集的说明:

1.标识(名称、版本、区域性、公钥)。

2.导出的类型。

3.该程序集所依赖的其他程序集。

4.运行所需的安全权限。

类型的说明:

1.名称、可见性、基类和实现的接口。

2.成员(方法、字段、属性、事件、嵌套的类型)。

属性:

1.修饰类型和成员的其他说明性元素。  

System.reflection命名空间包含的几个类,允许你反射(解析)这些元数据表的代码和反射相关的命 名空间(我们就是通过这几个命名空间访问反射信息):

System.Reflection.MemberInfo

System.Reflection.EventInfo

System.Reflection.FieldInfo

System.Reflection.MethodBase

System.Reflection.ConstructorInfo

System.Reflection.MethodInfo

System.Reflection.PropertyInfo

System.Type System.Reflection.Assembly

时间: 2024-11-05 21:05:15

.NET中反射机制的使用与分析的相关文章

javasejava...-javase中反射机制原理

问题描述 javase中反射机制原理 基础班结课了,最后讲的反射机制,感觉晕了.请问大神们它的原理和作用是什么?谢谢啦. 解决方案 原理,Java和C++不同,在编译的时候把对象的字段.方法.方法的参数等描述信息(元数据,metadata)也写入了程序中. 因此java可以在运行的时候检索这些信息. 作用,运行时创建一个对象,调用方法,这个很适合插件开发,因为插件是在写了主程序之后开发的,只能动态调用 运行时类型查询,比如eclipse可以给你函数参数和成员提示,这个就是反射实现的. 解决方案二

java中反射机制通过字节码文件对象获取字段和函数的方法

pclass = Class.forName("get_class_method.Person"); //Field ageField = pclass.getField("age");//因为age成员变量是私有的,所以会产生NoSuchFieldException异常 Field ageField = pclass.getDeclaredField("age");//获得该对象反映此 Class 对象所表示的类或接口的指定已声明字段 Obje

浅析Java中的反射机制原理

       反射反射,程序员的快乐!        Java中反射机制使用的还是比较广泛的,系统的灵活性.可扩展性大都都是通过反射等方式来加载外部插件,使得系统与插件解耦的同时,增加了功能.但是很多人都只是会用,却是不知道它的实现机制,今天就由我来带大家揭开反射机制的神秘面纱.        Java中是用Class.forName(classname)来反射类. package com.java.reflecttest; import com.java.dbtest.DBTest; /**

PHP基于反射机制实现插件的可插拔设计详解_php技巧

本文实例讲述了PHP基于反射机制实现插件的可插拔设计.分享给大家供大家参考,具体如下: 说PHP和ASP等同的朋友们可以就此打住了,PHP支持反射,而且还是非常的强大.好了,我们开始今天的话题. 功能描述: 页面拥有一个主导航菜单,里头有默认连接若干. 插件统一存放在一个目录,插件载入后会自动在导航菜单中增加上自己所需的链接. 插件载入时可执行一定的操作. 动态增删插件无需改动代码. 最终效果: 首页,插件1,插件2 "首页"是系统自带的菜单项."插件1"和&quo

Java反射机制详解_java

本文较为详细的分析了Java反射机制.分享给大家供大家参考,具体如下: 一.预先需要掌握的知识(java虚拟机) java虚拟机的方法区: java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区.方法区的主要作用是存储被装载的类 的类型信息,当java虚拟机装载某个类型的时候,需要类装载器定位相应的class文件,然后将其读入到java虚拟机中,紧接着虚拟机提取class 中的类型信息,将这些信息存储到方法区中.这些信息主要包括: 1.这个类型的全

Java 反射机制详解及实例代码_java

Java反射详解 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象获得完整的包名和类名 package Reflect; /** * 通过一个对象获得完整的包名和类名 * */ class Demo{ //other codes... } class hello{ public static void main(String[] args) {

Java中的类反射机制

一.反射的概念 :反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩.其中LEAD/LEAD++ .OpenC++ .MetaXa和OpenJava等就是基于反射机制的语言.最近,反射机制也被应用到了视窗系统.操作系统和文件系统中. 反射本身并不是一个新概念,它可能会使我们联想到光学中的反射概念,尽管计算机科学

Java中的反射机制

反射,reflection,听其名就像照镜子一样,可以看见自己也可以看见别人的每一部分.在java语言中这 是一个很重要的特性.下面是来自sun公司官网关于反射的介绍: Reflection is a feature in the Java programming language. It allows an executing Java program to examine or "introspect" upon itself, and manipulate internal pr

简述.Net 中的反射机制

概述反射 通过反射可以提供类型信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象. 反射机制允许程序在执行过程中动态地添加各种功能. 运行时类型标识 运行时类型标识(RTTI),可以在程序执行期间判定对象类型.例如使用它能够确切地知道基类引用指向了什么类型对象. 运行时类型标识,能预先测试某个强制类型转换操作,能否成功,从而避免无效的强制类型转换异常. 在c#中有三个支持RTTI的关键字:is . as  .typeof. 下面依次介绍他们 is运算符: 通过is运算符,能够判断对