在使用.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/

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

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

    在使用.NET创建的程序或组件时,元数据(metadata)和代码(code)都存储于"自成一体"的单元中,这个单元称为装配件.我们可以在程序运行期间访问这些信息.在System. ...

  2. 基础命名空间:反射 using System.Reflection

    反射概念:       .Net的应用程序由几个部分:‘程序集(Assembly)’.‘模块(Module)’.‘类型(class)’组成,程序集包含模块 模块包含类型,类型又包含 成员,而反射提供一 ...

  3. C#反射发出System.Reflection.Emit学习

    一.System.Reflection.Emit概述 Emit,可以称为发出或者产生.与Emit相关的类基本都存在于System.Reflection.Emit命名空间下.反射,我们可以取得形如程序集 ...

  4. 反射基础 System.Reflection

    一.获取程序集Assembly 1.获取当前运行的程序集 System.Reflection.Assembly[] asm = AppDomain.CurrentDomain.GetAssemblie ...

  5. System.Reflection.Emit学习

    C#反射发出System.Reflection.Emit学习 分享: 1 一.System.Reflection.Emit概述 Emit,可以称为发出或者产生.与Emit相关的类基本都存在于Syste ...

  6. List GroupBy真实用法,Reflection(反射)用法,Enum用法,正则,搜索下拉布局

    1.List  GroupBy 用法 var _roomProducts = homesingProducts.GroupBy(t => t.RoomName); RoomedProducts ...

  7. Type.Missing和System.Reflection.Missing.Value

    Type.Missing https://msdn.microsoft.com/en-us/library/system.type.missing(v=vs.110).aspx Missing.Val ...

  8. 利用.NET Core类库System.Reflection.DispatchProxy实现简易Aop

    背景 Aop即是面向切面编程,众多Aop框架里Castle是最为人所知的,另外还有死去的Spring.NET,当然,.NET Core社区新秀AspectCore在性能与功能上都非常优秀,已经逐渐被社 ...

  9. System.Reflection 获取描述

    我们需要获取类,属性,方法的描述.这个跟获取枚举的描述一样,需要我们通过反射来做.这还需要我们的利用System.ComponentModel:Description  的属性来完成. 新建一个类:使 ...

随机推荐

  1. Aragorn's Story

    A - Aragorn's Story 直接套 线段树+树剖 板子 代码: // Created by CAD on 2019/8/12. #include <bits/stdc++.h> ...

  2. JS框架_(JQuery.js)上传进度条

    百度云盘 传送门 密码: 1pou 纯CSS上传进度条效果: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN ...

  3. html5 代码画兰博基尼跑车,6不6你说的算!

    源代码下方 由于本人喜爱html5,无聊所画: 画图需要掌握; 1.画布,画笔,画圆,给画笔添加颜色.(注:掌握这几点,你就可以称霸画图界了.) 虽然没有画画天赋,但代码写的也是溜溜滴!(注:此图没有 ...

  4. Js基础知识(二) - 原型链与继承精彩的讲解

    作用域.原型链.继承与闭包详解 注意:本章讲的是在es6之前的原型链与继承.es6引入了类的概念,只是在写法上有所不同,原理是一样的. 几个面试常问的几个问题,你是否知道 instanceof的原理 ...

  5. nginx location正则

    nginx location正则写法 一个示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # ...

  6. linux添加新用户

    使用root用户adduser yj 后面操作有提示 用这种方法新建的用户会在home下生成用户文件夹

  7. mingw下的msys显示与输入乱码

    一直很喜欢gcc+vim这个貌似已经不用在强调了,好了,我只是想说明下我的问题是首先从gcc编译出错提示开始的 正如上面所说,安装完MinGW后使用gcc一编译,这程序没有错误还好,这一有错误发现输入 ...

  8. [flask]jina2处理表单--实现搜索功能

    思路: 获取查询关键字 查询数据库,获得查询结果 将查询结果返回模板文件  forms.py from flask_wtf import FlaskForm from wtforms import S ...

  9. django路由的二级分发

    基于二级分发设计url路由 path('index/', views.index), path('index/', ([ path('test01/', test01), path('test02/' ...

  10. robotframework 配置过程中遇到的问题

    现有环境配置:操作系统: Win7 32bitPython 2.7.8Python 3.5.2Pycharm Community Edition 2016.3.2robotframework: 3.0 ...