反射的用途:
    (1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。 
    (2)使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。 
    (3)使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。 
    (4)使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。
    (5)使用FiedInfo了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段值。
    (6)使用EventInfo了解事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等,添加或移除事件处理程序。 
    (7)使用PropertyInfo了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值。 
    (8)使用ParameterInfo了解参数的名称、数据类型、是输入参数还是输出参数,以及参数在方法签名中的位置等。

反射用到的命名空间:
    System.Reflection
    System.Type
    System.Reflection.Assembly

反射用到的主要类:
    System.Type 类--通过这个类可以访问任何给定数据类型的信息。
    System.Reflection.Assembly类--它可以用于访问给定程序集的信息,或者把这个程序集加载到程序中。
    
System.Type类:
    System.Type 类对于反射起着核心的作用。但它是一个抽象的基类,Type有与每种数据类型对应的派生类,我们使用这个派生类的对象的方法、字段、属性来查找有关该类型的所有信息。
    获取给定类型的Type引用有3种常用方式:
    ●使用 C# typeof 运算符。
        Type t = typeof(string);
    ●使用对象GetType()方法。
        string s = "grayworm";
        Type t = s.GetType(); 
    ●还可以调用Type类的静态方法GetType()。
        Type t = Type.GetType("System.String");

   Type类的属性:
        Name 数据类型名
        FullName 数据类型的完全限定名(包括命名空间名)
        Namespace 定义数据类型的命名空间名
        IsAbstract 指示该类型是否是抽象类型
        IsArray   指示该类型是否是数组
        IsClass   指示该类型是否是类
        IsEnum   指示该类型是否是枚举
        IsInterface    指示该类型是否是接口
        IsPublic 指示该类型是否是公有的
        IsSealed 指示该类型是否是密封类
        IsValueType 指示该类型是否是值类型
    Type类的方法:
        GetConstructor(), GetConstructors():返回ConstructorInfo类型,用于取得该类的构造函数的信息
        GetEvent(), GetEvents():返回EventInfo类型,用于取得该类的事件的信息
        GetField(), GetFields():返回FieldInfo类型,用于取得该类的字段(成员变量)的信息
        GetInterface(), GetInterfaces():返回InterfaceInfo类型,用于取得该类实现的接口的信息
        GetMember(), GetMembers():返回MemberInfo类型,用于取得该类的所有成员的信息
        GetMethod(), GetMethods():返回MethodInfo类型,用于取得该类的方法的信息
        GetProperty(), GetProperties():返回PropertyInfo类型,用于取得该类的属性的信息
    可以调用这些成员,其方式是调用Type的InvokeMember()方法,或者调用MethodInfo, PropertyInfo和其他类的Invoke()方法。 

例子

  1. string path = System.Reflection.Assembly.GetExecutingAssembly().Location; // 获取当前程序的位置
  2. Console.WriteLine(System.IO.Path.GetDirectoryName(path));
  3. Console.ReadKey();
使用反射的invoke方法来调用类中的方法
  1. class Man
  2. {
  3. public void Add()
  4. {
  5. Console.WriteLine("this is a add operation");
  6. }
  7. }
  1. Man mm = new Man();
  2. var ss = typeof(Man).GetMethod("Add"); // GetMethod里面写的是字符串
  3. ss.Invoke(mm, new object[] { }); // 如果函数是没有参数的话,那么就用一个空对象来填充,用NULL也可以
  4. Console.ReadKey();

 

来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/weloveshare/p/5325691.html

C#-反射知识点(转载)相关推荐

  1. JAVA 反射知识点总汇

    从代码角度,关于反射的用法总结 一.概念 1.1 概念 简单说,JAVA反射机制是指在运行态可直接操作任意类或对象的所有属性和方法的功能,无论他是私有还是public. 1.2 反射的用途 在运行时获 ...

  2. 反射知识点总结《Lipp学习笔记》

    反射 难点总结: 1.例子入手 package test;import java.lang.reflect.Field; import java.lang.reflect.Method; import ...

  3. 多线程1.学习资料2.面试题3.知识点

    学习资料 书籍 Java并发编程实战 book.douban.com/subject/104- 网络资料 聊聊高并发 这个系列涉及到了并发编程的原理,技术,算法,设计,底层实现,经验积累等方方面面 b ...

  4. Java知识系列 -- 反射

    原理 要想理解 Java 反射,首先要弄清类的加载过程. 比如这行代码 Person p = new Person();. 我们想要创建一个 Person 对象,并用 p 作为对象的引用. 在 Jav ...

  5. Java RTTI与反射(参照Java编程思想与新浪博客)

    一.Java的RTTI  RTTI(Run-Time Type Identification,通过运行时类型识别)的含义就是在运行时识别一个对象的类型,其对应的类是Class对象,每个java里面的类 ...

  6. 一天一个知识点 - 浅谈 JavaScript 的数据类型

    前言 前些日子,在掘金上看到一片热门文章<在酷家乐做面试官的日子>.该文作者以面试官的角度,详细阐述了作为一名 web 应聘者应该具有哪些技能,才会更让人青睐. 在对比自身的过程中,发现有 ...

  7. java设计模——反射的应用 (利用反射来去除if判断语句)

    利用反射来去除if判断语句 我的以前写的一个查分系统,就是部长让我写的那个,使用一个分发器(函数),他会根据传递进来的字符串参数调用不同的方. If("add".equalsIgn ...

  8. DOS攻击之详解--转载

    源地址没有找到,间接引用地址:http://wushank.blog.51cto.com/3489095/1156004 DoS到底是什么?接触PC机较早的同志会直接想到微软磁盘操作系统的DOS--D ...

  9. Java笔记(十九) 反射

    反射 反射是在运行时获取类型的信息,再根据这些信息进行操作. 一.Class类 每个已加载的类在内存中都有一份类信息,每个对象都有指向它的类信息的引用. 在Java中,类信息对应的类就是java.la ...

  10. html属性 id去重,JS相关知识点总结

    一.获取元素方法 1.document.getElementById("元素id号"); 可以使用内置对象document上的getElementById方法来获取页面上设置了id ...

最新文章

  1. springcloud(一)-初识
  2. SDUTOJ2828_字典树
  3. php while结束循环吗,php while循环退不出是什么有关问题
  4. c语言case后接printf,C编程中switch。case 问题
  5. 一个多文件编程里.h文件定义static变量产生的问题
  6. 用于 Domino Web Access 的 Notes.ini 变量
  7. MCSA / Windows Server 2016 使用Hyper-V组件搭建实验环境
  8. Python3开启自带http服务
  9. 万能地图下载器矢量标注功能特性
  10. python大气模型算法_[学习笔记][Python机器学习:预测分析核心算法][利用Python集成方法工具包构建梯度提升模型]...
  11. 服务链路追踪类型和区别
  12. linux shell 指令 诸如-d, -f, -e之类的判断表达式
  13. 无线信号的接收流程和接收机中基本结构的具体功能
  14. 使用微博自动记录俯卧撑个数
  15. 隐藏文件去掉隐藏属性
  16. android 装饰着模式,Android与设计模式——装饰者(Decorator)模式
  17. BZOJ2668:[CQOI2012]交换棋子——题解
  18. 终于我用JOL打破了你对java对象的所有想象
  19. ion框架 android,模块化 GKI 的 ION 堆
  20. 选择计算机还是医学专业排名,最好找工作的十大专业,医学仅第二

热门文章

  1. python爬取知乎用户信息_python爬取知乎用户总结
  2. python怎么看待_如何看待将Python作为少儿编程的基础语言?
  3. ansys linux运行_如何在linux系统下启动workbench。谢谢啦。 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
  4. 第二章 生成、打包、部署和管理应用程序及类型
  5. linux系统关闭指定服务的方式
  6. 【吴恩达机器学习】学习笔记——梯度下降
  7. Node.js因为OpenSSL安全问题推迟更新
  8. 超实用的JavaScript技巧及最佳实践(下)
  9. 文/有品生活(pinpinlife) 小户型家具如何摆?
  10. 基于16QAM调制的OFDM系统仿真实现