以前面试包括自己学习的时候经常会碰到这3个东西,也查过相关介绍,晦涩难懂,虽然看完之后,当时勉强理解,不过过一段时间又忘了。其实这篇文章可以分两篇(clr、程序集)和(反射、控制反转)来写,但它们之间有着内在的联系,我这里把它们放到一起学习,以便于自己的深入记忆和理解。最后也是希望大家关注一下原理的东西,不了解.Net Framewor怎么设计优秀的.net框架呢?多学多看多回顾,才能将知识点融会贯通。

CLR

CLR(Common Language Runtime,简称CLR)通用语言运行时,它是.net框架的核心,意思就是可被各种不同语言所使用的运行时。vs的ide中有托管扩展C++,C#,VB等等,说明vs中集成了各种面向CLR的语言编译器。当我们用不同的语言编写代码时,编译器就会对应将我们的代码编译成面向CLR的代码。有什么好处呢,比如在数学和金融领域的应用中,在表达相同意图的情况下,Python将会比C#节省好几天时间。还有一些模块如果对性能有要求,C++编写的代码肯定会比C#快。

为了加深一下理解,可以看一下最近比较好的一篇博客,.net环境下跨进程、高频率读写数据。看完还可以顺便理解一下Redis。

程序集

说程序集之前,先来了解一下什么是托管模块,通过前边介绍,我们可以通过任何支持CLR的编程语言来创建源代码文件,然后通过相应的编译器做代码检查和源代码分析,但是不管使用了何种的编译器,最后生成的结果都是一个托管模块(一种需要CLR才能执行的可移植可执行(p'ortable executable简称PE)的文件),下图展示了将源代码编译成托管模块

托管模块包含,PE表头、CLR表头、元数据和IL中间代码。这里详细介绍下元数据的用处,方便后边理解反射。

元数据用处:

1、元数据省去编译时对头文件和库文件的需求,因为含有类型和成员和中间代码已经包含所有被引用的类型和成员信息。编译器可以通过托管模块读取元数据来获得这些信息。

2、可以利用元数据来辅助我们编写代码(某个类型提供哪些方法,某个方法有哪些参数)

3、CLR的代码验证可以利用元数据来确保代码执行安全的操作。

4、利用元数据,我们可以将一个对象的字段序列化到一个内存块中,然后远程传送到另外一台机器,最后在远程机器上执行反序列化,从而重新创建对象和它的状态

(例如xml webservice)。

5、利用元数据,垃圾收集器可以追踪对象的生存期。

CLR并不与托管模块打交道,它与程序集(exe或dll)打交道,于是编译器需将托管模块组合成程序集,如图所示:

反射

理解反射之前,最好先写一下代码再来看此介绍,会很好的理解。元数据其实就一堆表,当我们生成程序集或者模块时,编译器会创建一个类型(Type)定义表、字段定义表、方法定义表等等;system.reflection命名空间的某些类型会使得我们能够编写代码来分析这些元数据(这其实就是反射),并为这些元数据建立对象模型,然后利用元数据的对象模型的类型,我们可以根据一个类型定义表得到他包含的所有类型,对于每一个类型 ,我们又可以获得他的基类型、它实现的接口和相关联的一些标记,还可以利用  system.reflection命名空间的类型来获取一个类型的字段、属性、方法和事件,而且可以获取元数据的定制特性(Attribute)。

控制反转

这里建议看一下反射机制、依赖注入、控制反转这篇文章!写的挺好。后续有时间争取写一些反射和控制反转的实例代码,方便大家学习!!!

总结一下

将不同的知识点串联起来学习,真的是一个很好的方式,鼓励大家多多学习,多多总结,早日成为大牛!!!

CLR、程序集、反射和控制反转的更多相关文章

  1. [PHP] 使用反射实现的控制反转

    搬家进程中反射实现控制反转,样做的好处是可以通过配置项动态的控制下面那个类的属性 1.$this->getObject($class, $config->getConfig('param' ...

  2. C#通过反射实现简单的控制反转和依赖注入(一)

    Java项目中通过@Autowire便可以实现将对象实例化到指定的字段,无需手动new一个对象出来,用起来非常方便,因为Java类加载器在在加载过程会将扫描所有@Servie.@Mapper.@Com ...

  3. [.net 面向对象程序设计深入](26)实战设计模式——使用Ioc模式(控制反转或依赖注入)实现松散耦合设计(1)

    [.net 面向对象程序设计深入](26)实战设计模式——使用IoC模式(控制反转或依赖注入)实现松散耦合设计(1) 1,关于IOC模式 先看一些名词含义: IOC: Inversion of con ...

  4. [.net 面向对象程序设计深入](31)实战设计模式——使用Ioc模式(控制反转或依赖注入)实现松散耦合设计(1)

    [.net 面向对象程序设计深入](31)实战设计模式——使用IoC模式(控制反转或依赖注入)实现松散耦合设计(1) 1,关于IOC模式 先看一些名词含义: IOC: Inversion of con ...

  5. 【AutoFac】依赖注入和控制反转的使用

    在开始之前首先解释一下我认为的依赖注入和控制反转的意思.(新手理解,哪里说得不正确还请指正和见谅) 控制反转:我们向IOC容器发出获取一个对象实例的一个请求,IOC容器便把这个对象实例“注入”到我们的 ...

  6. C#设计模式之控制反转即依赖注入-Spring.NET

    主流的依赖注入方案:微软企业库中的Unity.Spring.NET.StructureMap.Ninject.Castle Windsor等等. 本章用简单的案例讲解 Spring.NET IOC-控 ...

  7. C#代码实现IoC(控制反转)设计,以及我对IoC的理解

    一. 什么是IoC 当在A类中要使用B类的时候,我们一般都是采用new的方式来实例化B类,这样一来这两个类就有很强的依赖关系,不符合低耦合的设计思想.这时候我们可以通过一个中间容器来实例化对象,需要的 ...

  8. 依赖倒置原则(DIP)、控制反转(IoC)、依赖注入(DI)(C#)

    理解: 依赖倒置原则(DIP)主程序要依赖于抽象接口,不要依赖于具体实现.高层模块不应该依赖底层模块,两个都应该以来抽象.抽象不应该依赖细节,细节应该依赖抽象.(具体看我上一篇贴子) 依赖倒置原则是六 ...

  9. 浅谈(IOC)依赖注入与控制反转(DI)

    前言:参考了百度文献和https://www.cnblogs.com/liuqifeng/p/11077592.html以及http://www.cnblogs.com/leoo2sk/archive ...

随机推荐

  1. 关于synchronized

    如果用synchronized修饰一个类成员方法A,那么就不会出现下面的情况: 同时多个线程访问这个类的A方法. 当然如果还有一个方法B,它没有被synchronized修饰,那么A方法与B方法是可以 ...

  2. 43个优秀的Swift开源项目推荐

    "轮子" 工具类 项目 开发者 备注 SwiftyJSON tangplin, lingoer GitHub 上最为开发者认可的 JSON 解析类 Dollar.swift Ank ...

  3. Linux 获得机器的IP和网卡信息

    Linux 获得机器的IP和网卡信息 代码来自于网络, 我改写了, 有美不敢自专, 特分享之.用法很简单,就3个函数. 头文件getmac.h: /** * getmac.h * * 2014-07- ...

  4. Linux - RAID和LVM

    什么是 RAID 磁盘阵列全名是『 Redundant Arrays of Inexpensive Disks, RAID 』,英翻中的意思是:容错式廉价磁盘阵列. RAID 可以透过一个技术(软件或 ...

  5. PS 图像调整算法——自动色阶 (Auto Levels)

    PS 给出的定义: Enhance Per Channel Contrast:Maximizes the tonal range in each channel to produce a more d ...

  6. Java语言实现二分法

    二分法是一个简单,高效,并广泛应用的查找方法 import java.util.arrays; public class BinarySearch { public static int rank(i ...

  7. Android studio 项目(Project)依赖(非Module)

    Android studio 项目(Project)依赖(非Module) 0. 前言 对于Module 级别的依赖大家都知道,今天说下Android Studio下的项目依赖. 场景: A Proj ...

  8. sort list(给链表排序)

    Sort a linked list in O(n log n) time using constant space complexity. 题目要求使用O(nlogn)时间复杂度,可以考虑使用归并排 ...

  9. pslq常用操作

    1,登录后默认自动选中My Objects  默认情况下,PLSQL Developer登录后,Brower里会选择All objects,如果你登录的用户是dba,要展开tables目录,正常情况都 ...

  10. zookeeper 分布式管理

    分布式框架: Zookeeper与paxos算法 一.            zookeeper是什么 官方说辞:Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是 ...