刚工作没多久,需要对以往的知识进行复习和巩固。先讲讲最近在公司常用到的反射机制。

反射(Reflection):提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。

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

反射用到的主要类:
    System.Type 类--通过这个类可以访问任何给定数据类型的信息。
    System.Reflection.Assembly类--它可以用于访问给定程序集的信息,或者把这个程序集加载到程序中。

反射一般运用于3种情况

1,基于System.Type的反射;2,对方法,属性等的反射;3,动态加载以及推迟绑定。

一,基于System.Type的反射 

注:Type 类是反射类的核心。Type 封装了对象类型的表示。Type 类是访问元数据的主要手段。

例1,

static void Main(string[] args)
        {
            string s1 = "Hello Reflection!";
            int s2 = 888;
            Type t1 = s1.GetType();//获取s1的类型
            Type t2 = s2.GetType();
            Console.WriteLine(t1.FullName);// 获取t1的完全限定名
            Console.WriteLine(t2);// 有时候,t1.Fullname 与 t1 的运行效果是一样的,但下面就有本质的区别。

}

 例 2,

static void Main(string[] args)
        {

Type t3 = Type.GetType("System.String", false, true);  //获取指定名称的 System.Type ,bool 型 - 是否抛出异常(false:找不到指定类型不抛出异常),

//   bool 型 - 是否忽视区分大小写(true: 不区分大小写)
            Type t4 = Type.GetType("System.Strgging", false, true);
            Console.WriteLine(t3);

Console.WriteLine("-----------");
            Console.WriteLine(t4);

Console.WriteLine("-----------");

}

注意啦,例1上的 t1 与 t1.FullName 区别来啦

将例2的 Console.WriteLine(t4) ; 改为 Console.WriteLine(t4.FullName); 查看运行结果。

  bug 来了!!!此处异常是在

执行 Console.WriteLine(t4.FullName);时发生的。与上面  Type t4 = Type.GetType("System.Strgging", false, true); 的 bool false 的不抛出异常无关。

例3,

用 typeof 关键字 获取类型 与 GetType() 又不一样啦。

typeof(string)//直接填写其类型即可

static void Main(string[] args)
        {

Type t5 = typeof(string);
            Type t6 = typeof(string2222);
            Console.WriteLine(t5);
            Console.WriteLine(t6);

}

// 这里面t5.FullName 与 t5 运行效果是一样的。 但是当所输入的类型不存在,即使你是 t6 不是 t6.FullName 也会抛异常的,不会显示为空。

Type仍有许多用途,具体的查看一些相关书籍,先讲一些小例题,让大家熟悉一下反射的浅显内容,在 C#反射(二)在讲解  2,对方法,属性等的反射。

C# 反射(一)的更多相关文章

  1. 隐私泄露杀手锏 —— Flash 权限反射

    [简版:http://weibo.com/p/1001603881940380956046] 前言 一直以为该风险早已被重视,但最近无意中发现,仍有不少网站存在该缺陷,其中不乏一些常用的邮箱.社交网站 ...

  2. Java学习之反射机制及应用场景

    前言: 最近公司正在进行业务组件化进程,其中的路由实现用到了Java的反射机制,既然用到了就想着好好学习总结一下,其实无论是之前的EventBus 2.x版本还是Retrofit.早期的View注解框 ...

  3. 关于 CSS 反射倒影的研究思考

    原文地址:https://css-tricks.com/state-css-reflections 译者:nzbin 友情提示:由于演示 demo 的兼容性,推荐火狐浏览.该文章篇幅较长,内容庞杂,有 ...

  4. 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)

    建议106:动态代理可以使代理模式更加灵活 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发.我们知道一个静态代理是通过主题角色(Prox ...

  5. 运用Mono.Cecil 反射读取.NET程序集元数据

    CLR自带的反射机智和API可以很轻松的读取.NET程序集信息,但是不能对程序集进行修改.CLR提供的是只读的API,但是开源项目Mono.Cecil不仅仅可以读取.NET程序集的元数据,还可以进行修 ...

  6. .NET面试题系列[6] - 反射

    反射 - 定义,实例与优化 在面试中,通常会考察反射的定义(操作元数据),可以用反射做什么(获得程序集及其各个部件),反射有什么使用场景(ORM,序列化,反序列化,值类型比较等).如果答得好,还可能会 ...

  7. .NET基础拾遗(4)委托、事件、反射与特性

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  8. C++的性能C#的产能?! - .Net Native 系列五:.Net Native与反射

    此系列系小九的学堂原创翻译,翻译自微软官方开发向导,一共分为六个主题.本文是第五个主题:.Net Native与反射. 向导文链接:<C++的性能C#的产能?! - .Net Native 系列 ...

  9. [源码]Literacy 快速反射读写对象属性,字段

    Literacy 说明 Literacy使用IL指令生成方法委托,性能方面,在调用次数达到一定量的时候比反射高很多 当然,用IL指令生成一个方法也是有时间消耗的,所以在只使用一次或少数几次的情况,不但 ...

  10. SI与EMI(一) - 反射是怎样影响EMI

    Mark为期两天的EMC培训中大概分成四个时间差不多的部分,简单来说分别是SI.PI.回流.屏蔽.而在信号完整性的书籍中,也会把信号完整性分为:1.信号自身传输的问题(反射,损耗):2.信号与信号之间 ...

随机推荐

  1. Flume数据采集结合etcd作为配置中心在爬虫数据采集处理中的架构实践。

    Apache Flume是一个分布式的.可靠的.可用的系统,用于有效地收集. 聚合和将大量日志数据从许多不同的源移动到一个集中的数据存储,但是其本身是以本地properties作为配置的,配置无法做到 ...

  2. 纯干货 C# 通过 RFC_READ_TABLE 读取 SAP TABLE

    SAP系统又称企业管理解决方案,是全球企业管理软件与解决方案的技术领袖,同时也是市场领导者.通过其应用软件.服务与支持,SAP持续不断向全球各行业企业提供全面的企业级管理软件解决方案. 在实际开发过程 ...

  3. 用Arcgis缓存文件发布服务

    切片文件类型为: 其中_alllayers中为各等级的切片文件,xml文件为切片信息(级别).发布服务的步骤如下: 1.将文件拷贝到服务器上: 2.将gdb和xml文件拷贝出来,放到桌面上: 3.打开 ...

  4. liunx 上安装redis

    目录 1.安装包 2.解压:tar xzf redis-5.0.5.tar.gz 3.安装 4.编辑redis.conf文件 5.配置密码 6.启动配置: 7.配置公网链接 8.杀掉redis进程 9 ...

  5. 码云上开源JAVA项目收藏

    一. 个人学习项目 1. BootDo面向学习型的开源框架 (可以当做 管理台脚手架) BootDo是高效率,低封装,面向学习型,面向微服的开源Java EE开发框架. BootDo是在SpringB ...

  6. [noip模拟]水灾<BFS>

    水灾(sliker.cpp/c/pas) 1000MS  64MB 大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没. CCY ...

  7. java初学复习

    作为学Java的小白,忽然想看一看自己学了些什么东西,话不多说,(这都是新手弄的总结)让我们看一看: 1.我们要先了解Java技术 Java SE:标准版java技术的基础和核心 Java EE:企业 ...

  8. [ddt01篇]十年测试老鸟帮您解析:ddt数据驱动实现自动化测试入门基础应用

    一.什么是DDT数据驱动框架 ​ 全称:data driver test数据驱动测试框架,可以完美的应用于unittest框架实现数据驱动.ddt使用简介: 1.测试数据为多个字典的list类型 2. ...

  9. ASP.NET Core技术研究-探秘依赖注入框架

    ASP.NET Core在底层内置了一个依赖注入框架,通过依赖注入的方式注册服务.提供服务.依赖注入不仅服务于ASP.NET Core自身,同时也是应用程序的服务提供者. 毫不夸张的说,ASP.NET ...

  10. shell编写一个判断脚本

                                                              shell编写一个判断脚本 4.1问题 本例要求在虚拟机server0上创建/roo ...