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

反射(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. ArcGIS Server的安装

    1.双击ArcGIS Server安装目录下的Setup.exe. 2.点击“Next”. 3.选择“I accept the license agreement”,点击“Next”. 4.点击“Ch ...

  2. coding++:java-Date日期转换工具类

    Code: package com.tree.ztree_demo.utils; import org.springframework.util.ObjectUtils; import java.te ...

  3. spring boot 源码赏析之事件监听

    使用spring Boot已经快1年多了,期间一直想点开springboot源码查看,但由于种种原因一直未能如愿(主要是人类的惰性...),今天就拿springboot 的监听事件祭刀. spring ...

  4. jsp学习笔记day2

    一.jsp基础语法 1.注释 显式注释语法: <!--注释内容-->客户端可以看见 隐式注释语法:客户端不能看见 <% //单行注释 /*多行注释*/ %> 2.Scriptl ...

  5. 添加属于自己的python模块空间

    在我们学习python的过程中会遇到很多时候,我们需要自己曾经写过的模块,它可能是一个函数或者其他的东西,,,, 下面是我的解决过程,如果你像将自己建立的文件夹当作你存放自己写的模块的地方,你需要将你 ...

  6. Python语法元素分析

    缩进 1个缩进 = 4个空格 用以在Python中标明代码的层次关系 缩进是Python语言中表明程序框架的唯一手段 注释 注释:程序员在代码中加入的说明信息,不被计算机执行 注释的两种方法: 单行注 ...

  7. Material Design 组件之NavigationView

    今天来看一下 NavigationView 的使用,NavigationView 是一个标准的导航菜单,其菜单内容由菜单资源文件来填充,NavigationView 一般和 DrawerLayout ...

  8. CSS3实现3D转换

    实现效果: 当鼠标悬停在图片上面时,图片发生翻转,文案出来,鼠标取消之后就又恢复 实现代码: <!DOCTYPE html> <html lang="en"> ...

  9. 线程间交换数据的Exchanger

    作者:Steven1997 链接:https://www.jianshu.com/p/9b59829fb191 来源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处. Exc ...

  10. Golang入门(1):安装与配置环境变量的意义

    摘要 在几年前学习Java的时候,环境的配置就会劝退一部分的初学者.而对于Golang来说,也需要从环境的配置开始学起.这一篇文章将从如何安装Golang开始讲起,随后将会提到Golang中的环境变量 ...