本章将对CLR中的IL、CTS和CLS进行一个大概的总结。下章将开始第二章的内容。

IL我们称之为高级汇编语言或者中间语言,在我们编写基于.NET框架下的程序(不论是C#、VB或者J#等)在被编译成本地CPU指令前,都将被编译成IL语言,再有CLR对IL语言进行编译和控制。比如用VB在控制台应用程序写入如下代码:

Sub Main()

Console.WriteLine("VB")

End Sub

再用C#在控制台应用程序写入如下代码:

static void Main(string[] args)

{

Console.WriteLine("Test");

}

虽然语法完全不一样(除了输出比较相似外),但是如果我们用微软的MSIL反汇编程序加载编译完成后的exe文件,如图:

图1.1

图1.2

上面两张图中图1.1为编译完成后VB语言的代码,图1.2为编译完成后C#的代码,在我画红线的地方大家可以看出,出了第一行(红线)不一样为我们输出的字符串外,第二行(红线)是完全一样,也就是说不管在平台下什么语言进行编程,编译器最终都会把它编译成统一的IL代码(相同功能,比如示例中的控制台输出指令)。通过上面的示例可以很容易的看出CLR是如何支持多语言集成的,只是需要不同的编译器,把源文件编译成面向CLR的IL代码,就可以在.NET框架下面运行。

什么是CTS?

CTS(Common Type System 通用类型系统)是由微软制定的一个规范,它表述了一个类型的定义和行为。既然CTS是一组规范,那么都规定了什么呢?

一、CTS规定一个类型可以包含零个或多个成员(字段、属性、方法、事件);

二、CTS规定了一个类型的可视原则。就是我们所说的权限修饰符(public、private、protected、internal)

三、CTS规定任何类型都只能从一个类型中派生,即:System.Object类型。(虽然C++支持多集成,但是在.NET框架下,如果编译器发现开发人员使用了多集成,违反了CTS的这一规定,编译器就会报错。)

什么是CLS?

CLS(Common Language Specification 公共语言规范)是由微软制定的一个各个语言间都支持的功能。也就是说,CLS是CTS的一个子集,而这个子集是.NET框架下面所有编程语言都必须遵守的(如果需要C#和VC++的应用程序进行通信)。说的更详细一点就是说,如果你想用C#调用C++的组件,那么C++所使用的语法(如果该方法为public,如果方法不为public的话,CLS不进行约束),必须保证C#能够操作。可是C++程序员不一定知道C#能不能操作他所写的方法,这个时候就需要CLS进行约束,以保证C#能正常的调用C++的组件。

图1.3

图1.3中大家可以看出,CLR\CTS为.NET框架下的所有语言提供了一个大的功能集。每一个语言都使用了CLR\CTS的一个子集。但是这个子集中都包含了CLS这个最小的子集。也就是说所有语言的功能及都必须支持CLS最小的供能集。

到此这本书的第一章笔者只领悟到这些东西,可能还有更深层次的东西,由于笔者的水平有限,也只能到这里了。如有不对的地方、不准确的地方,希望各位看官都能即时的提出。以便笔者学习和纠正博文中的错误,谢谢!

转载于:https://www.cnblogs.com/BreatheLee/archive/2011/09/15/2177400.html

初读CLR Via C# 之 IL、CTS、CLS相关推荐

  1. 什么是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT

    什么是.NET? 起源:比尔盖茨在2000年的Professional Developers Conference介绍了一个崭新的平台叫作Next Generation Windows Service ...

  2. 跟小静读CLR via C#(02)-基元类型、引用类型、值类型

    跟小静读CLR via C#(02)-基元类型.引用类型.值类型 一. 基元类型 编译器能够直接支持的数据类型叫做基元类型.例如int, string等.基元类型和.NET框架类库FCL存在着直接的映 ...

  3. 跟小静读CLR via C#(05)- 访问限定、数据成员

    跟小静读CLR via C#(05)- 访问限定.数据成员 今天跟大家分享一下关于访问限定和数据成员的知识.主要包括以下两点: Abstract, sealed, virtual, new, over ...

  4. 跟小静读CLR via C#(06)- 构造器

    跟小静读CLR via C#(06)- 构造器 最近忙着看新还珠,好几天不学习了.玩物丧志啊,罪过罪过. 今天总结的是类构造器的知识,其实这方面的文章蛮多的,可还是觉得亲自写一下对自己的思考和认识会有 ...

  5. nginx源码初读(8)--让烦恼从数据结构开始(ngx_event)

    nginx中的事件模块是一个很重要的模块,但这里作为初读,我们只简单看一下ngx_event的数据结构,至于模块和机制,留作之后再分析. 下面是结构体ngx_event_t的代码: typedef s ...

  6. 初读《设计模式之禅》

    读这本书的起因源于csdn学生大本营的一次活动<设计模式之禅>试读员招募,身为程序员兼之学生大本营的老师没有道理不踊跃参加了(参加时可没走任何后门),佛祖显灵,真的能有幸成为了试读员.从得 ...

  7. 跟小静读CLR via C#-开篇及目录

    最近正在拜读Jeffrey大师的.NET巨作-<CLR via C#>.好书就像一杯茶,需要静下心来慢慢品.在写笔记的过程中,也加入了自己的思考:在和园友们的交流中,理解也不断的加深. 目 ...

  8. 敬天爱人 大道至简——初读《经营十二条》

    老板送了一本稻盛和夫的<经营十二条>让我看看,前段时间一直忙于应付考试与工作,直到今天才抽出时间好好研读了一番.从这本书里读到的第一印象就是日本人性格里特有的精神至上.团队意识.日本人强调 ...

  9. 初读《偷影子的人》观后感

    初读<偷影子的人>观后感 "为每一个你所偷来的影子找到点亮生命的小小光芒,为它们找回隐匿的记忆拼图,这便是我们对你的全部请托." < 偷影子的人>是法国作家 ...

最新文章

  1. Android开发环境搭建全程演示(jdk+eclip+android sdk)
  2. 【赠书】重磅好书联邦学习实战来袭!你值得拥有一本
  3. C++ map 中的reverse_iterator
  4. 字符串和datatime.time类型转为秒
  5. SAP License:关于未分摊差异的几种处理办法
  6. LinkedList 链表总结
  7. ipad录屏软件_如何在 Mac 上优雅的截图和录屏
  8. 良好的Coding习惯,从P3C开始--阿里P3C代码规范扫描插件
  9. iphone se卡贴教程
  10. 电子设计竞赛(6)-逆变电路
  11. steam 无法连接远程计算机,steam联机连不上 steam联不上网
  12. 计算机控制技术直流电机调速控制实验报告,pid直流电机转速控制实验报告(31页)-原创力文档...
  13. 学习微信小程序开发框架之脚本语言WXS
  14. SSL证书常见错误及解决办法
  15. 【IDL】使用IDL对Landsat系列进行批量水体提取
  16. ASP.NET的SEO:基础知识 (1)
  17. TCP/IP协议——三路握手、四路挥手
  18. 数据结构-链表、队列、栈、哈希表
  19. Android方向传感器实践——自己动手做指南针
  20. 炁体源流 鸿蒙,《一人之下》八奇技 炁体源流

热门文章

  1. 474. 一和零 golang动态规划
  2. linux操作系统之进程组及会话
  3. 内核ko模块strip使用
  4. memcpy/memset函数的c语言实现
  5. Unity(一)必然事件
  6. 1059 Prime Factors(25 分)
  7. java小程序查看器,成功拿到offer
  8. 保驾护航金三银四,内容太过真实
  9. jQuery 学习笔记(三)——事件与应用
  10. Squid 访问控制配置