CTS(通用类型系统)

  • CTS(通用类型系统)已关闭评论
  • 124 次浏览
  • A+
所属分类:.NET技术
摘要

有没有想过如果我们自己要设计一门编程语言,要做到什么样的标准才能符合在.Net平台下运行的条件呢?.Net在官方描述过一段话,大体的意思变成白话是:只要你的语言在编译后能够转换成CIL代码,那么你的语言就可以在.Net平台下进行开发和运行。

有没有想过如果我们自己要设计一门编程语言,要做到什么样的标准才能符合在.Net平台下运行的条件呢?.Net在官方描述过一段话,大体的意思变成白话是:只要你的语言在编译后能够转换成CIL代码,那么你的语言就可以在.Net平台下进行开发和运行。

 

 CIL语言之所以能够在.Net平台下运行,实际上它是符合了.Net的一套规则,这套规则定义了我们设计的编程语言可以做什么,不可以做什么,具有哪些特征。那么这条规则其实就称作CTS(通用类型系统),任何满足了这套规则的高级语言就可以被称为面向.Net平台的语言。换言之,就是你想在.Net平台下使用自己设计的编程语言进行开发和运行,那么就必须符合CTS的标准。

 

 在.Net平台下自带的一些编程语言,比如C#、VB.NET等。它们其实不过是开发的一套符合了CTS标准的语言,实际上还有很多的组织或团队,也遵循CTS的标准开发设计出了一些语言,比如Delphi.NET、FORTRAN等。

 

CTS规则包含的内容

类型

这里的类型要注意的是,并不是我们在开发中自定义类型(学生类、商品类),这里所说的类型是CTS通用类型系统中包含的类型,而我们的自定义类型是在这个基础之上的延申。CTS支持五种类型:类(Class)、枚举(Enum)、接口(interface)、结构(Struct)、委托(delegate),其中每个类别均有其特定的语义和用法。,这些类型其中可以将其划分为两类:值类型和引用类型。

类型成员

比如我们可以在自定义类型中定义一个Name属性并提供一个ShowName()方法。实际上这个实现操作就是CTS允许定义的类型行为和类型成员,这其中主要包括:字段、属性、方法、构造函数、事件、嵌套类型。

类型可访问性

所有类型都会有一个访问修饰符,比如我们熟知的:private、public、protected、internal等等。这些修饰符就构建了各个类型之间对其的访问权限。

更多

当然CTS中的规则内容不仅仅只有以上介绍到的这些,其中还包含很多方面。这其中任意一点的深入介绍就已超出本文章的介绍范围,本文主要目的是弄CTS的基本概念,如果需要深入了解其中每个规则内容则可以浏览官方文档:https://docs.microsoft.com/zh-cn/dotnet/standard/common-type-system

 

遵循CTS标准的补充说明

非全部实现

所有需要在.Net平台下使用的编程语言都必须符合CTS的规则,但这个符合并不是要求编程语言实现CTS的全部标准。比如C#本身,它也没有全部实现CTS所有的标准,也只实现了CTS的一部分功能。那有没有实现了CTS所有标准的语言呢?答案是有的,由于CIL是.Net运行时所能理解的语言,因此CIL实现了CTS全部的功能。

迎合舍弃

传统的C++是可以继承多个基类的,为了让熟悉C++语言的开发者也能在.Net平台下开发应用程序,微软就实现了一种面向.Net的C++语言。而这个举措就代表了微软自实现的C++就必须遵循CTS规则,那么原有的继承多个基类的标准在移植到.Net平台后就必须舍弃,从而遵循CTS:类只能继承一个基类的规则。

 

个人总结

CTS的存在更加体现出了.Net的跨语言性,.Net并不是为某个单独的语言提供服务的,也没有跟某个语言形成依赖,它是有一套通用的规则,这个规则就是CTS。那么不管你是什么语言,只要你符合CTS的规则,那么.Net就允许你在它上面运行。