C# System.Reflection (反射)

在使用.NET创建的程序或组件时,元数据(metadata)和代码(code)都存储于“自成一体”的单元中,这个单元称为装配件。我们可以在程序运行期间访问这些信息。
 
在System.Reflection中有这样一个class————Assembly,我们可以通过它来加载一个装配件。方法如下: 
Assembly assm=Assembly.LoadFrom(fileName); 
其中filename是要加载的装配件的文件名称(带路径)。 
接下来,我们就可以通过使用System.Reflection内提供的Info classes来获取装配件中的信息了。首先让我们看一下这些Info classes:
MethodInfo 获取某个“成员函数”的信息,并提供对此“成员函数”元数据的访问。 
ParameterInfo 获取某个“参数”的信息,并提供对此“参数”元数据的访问。 
Constructorinfo 获取某个“构造函数”的信息,并提供对此“构造函数”元数据的访问。 
PropertyInfo 获取某个“属性”的信息,并提供对此“属性”元数据的访问。 
FieldInfo 获取某个“数据成员”的信息,并提供对此“数据成员”元数据的访问。 
EventInfo 获取某个“事件”的信息,并提供对此“事件”元数据的访问。 
上面列出的这些classes(除ParameterInfo外)的访问操作,要通过一个Type对象来完成。比如我们要获得一个装配件的“成员函数”就要这样做: 
System.Reflection.Assembly ass=System.Reflection.Assembly.LoadFrom(fileName); 
Type[] tp=ass.GetTypes(); 
System.Reflection.MethodInfo[] mi=tp[0].GetMethods(); 
使用同样的方法我们还可以得到其它的信息,如下: 
获得“构造函数”信息:System.Reflection.ConstructorInfo[] ci=tp[0].GetConstructors(); 
获得“属性”信息:System.Reflection.PropertyInfo[] pi=tp[0].GetProperties(); 
获得“数据成员”信息:System.Reflection.FieldInfo[] fi=tp[0].GetFields(); 
获得“事件”信息:System.Reflection.EventInfo[] ei=tp[0].GetEvents(); 
此外,我们可以通过ParameterInfo类来获取“成员函数”和“构造函数”的参数信息,如下: 
获取“成员函数”的参数信息:System.Reflection.ParameterInfo[] pi=mi[0].GetParameters(); 
获取“构造函数”的参数信息:System.Reflection.ParameterInfo[] pi=ci[0].GetParameters(); 
ParameterInfo类有两个重要的属性:Name和ParameterType。通过它们我们可以得到“参数”的名称和数据类型。 
由于.NET将class的信息以“元数据”的形式封装在程序或是组件中,又提供了一系列可以获取“元数据”的方法,所以我们可以程序运行期间来动态的访问这些信息。

以下摘自百度:http://zhidao.baidu.com/question/294391411.html
个人肤浅理解,反射实际上就是得到程序集中的属性和方法.
实现步骤:
1,导入using System.Reflection;
2,Assembly.Load("程序集")加载程序集,返回类型是一个Assembly
3,   foreach (Type type in assembly.GetTypes())
            {
                string t = type.Name;
            }
   得到程序集中所有类的名称
4,Type type = assembly.GetType("程序集.类名");获取当前类的类型
5,Activator.CreateInstance(type); 创建此类型实例
6,MethodInfo mInfo = type.GetMethod("方法名");获取当前方法
7,mInfo.Invoke(null,方法参数);

本贴原文:http://ziseliuxingzh.blog.163.com/blog/static/51120863200832832311528/

时间: 2024-10-06 21:13:12

C# System.Reflection (反射)的相关文章

c#中system.reflection反射的使用

簡單理解為:取得已經封裝的好的dll格式程式集里的所有方法和屬性. 步驟如下: 1.Assembly ass = Assembly.LoadFrom("路徑+程式名稱"); //如 C:\\NWEEPI.DLL ; 加载程序集,返回类型是一个Assembly 2.Type t = ass.GetType(dtDLL.Rows[0]["namespace"].ToString() + "." + dtDLL.Rows[0]["classn

【C#基础】System.Reflection (反射)

在使用.NET创建的程序或组件时,元数据(metadata)和代码(code)都存储于"自成一体"的单元中,这个单元称为装配件.我们可以在程序运行期间访问这些信息.在System.Reflection中有这样一个class----Assembly,我们可以通过它来加载一个装配件.方法如下:Assembly assm=Assembly.LoadFrom(fileName);其中filename是要加载的装配件的文件名称(带路径).接下来,我们就可以通过使用System.Reflectio

EntityFramework动态创建模型:System.Reflection.Emit + Code First

动态创建Entity Framework模型并且创建数据库 使用System.Reflection.Emit+Code First model创建以下的一个实体类和DbContext并且创建数据库: 1 using System; 2 3 public class Blog 4 5 { 6 7 private int id; 8 9 private string name; 10 11 public int ID 12 13 { 14 15 get 16 17 { 18 19 return th

System.Reflection.Emit学习

C#反射发出System.Reflection.Emit学习 分享: 1 一.System.Reflection.Emit概述 Emit,可以称为发出或者产生.与Emit相关的类基本都存在于System.Reflection.Emit命名空间下.反射,我们可以取得形如程序集包含哪些类型,类型包含哪些方法等等大量的信息,而Emit则可以在运行时动态生成代码. 二.IL代码解析 以下代码为例: 1 static void Main(string[] args) 2 { 3 int i = 1; 4

C# 反射Reflection——反射反射程序员的快乐

一.什么是反射 反射Reflection:System.Reflection,是.Net Framework提供的一个帮助类库,可以读取并使用metadata. 反射是无处不在的,MVC-Asp.Net-ORM-IOC-AOP 几乎所有的框架都离不开反射 如下图是程序执行的过程,高级语言经过编译器编译得到dll/exe文件,这里的文件可以跨平台使用,编译后的文件中其实包括了metadata元数据(数据清单,描述了DLL/exe里面的各种信息)和IL(也是一种面向对象语言,但是不太好阅读)在经过C

Reflection(反射)

一.反射介绍 反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息. 有了反射,即可对每一个类型了如指掌.另外我还可以直接创建对象,即使这个对象的类型在编译时还不知道. 二.反射的用途 1.使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例 2.使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法 3

System.Reflection.Binder.cs

ylbtech-System.Reflection.Binder.cs 1.返回顶部 1. #region 程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll #endregion usin

System.Reflection.FieldInfo.cs

ylbtech-System.Reflection.FieldInfo.cs 1.返回顶部 1. #region 程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll #endregion u

System.Reflection.PropertyInfo.cs

ylbtech-System.Reflection.PropertyInfo.cs 1.返回顶部 1. #region 程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll #endregio