初读CLR Via C# 之 IL、CTS、CLS

              本文摘自本人博客园博客http://www.cnblogs.com/BreatheLee/archive/2011/09/15/2177400.html

 

本章将对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文件,如图:

clip_image002

图1.1

clip_image004

图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++的组件。

 

 clip_image006

图1.3

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值