CTS----公共类型系统

来源:互联网 发布:servlet获取复选框数据 编辑:程序博客网 时间:2024/05/16 11:46

转自:http://blog.csdn.net/shanyongxu/article/details/50889299,请点击链接查看原文,尊重楼主版权。


CTS----公共类型系统(Common Type System)

 

现在假设你正在开发一款新的语言,这种语言和C#VB.NET一样,在编译后也能生成CIL代码,也可以在.NET环境下运行,那么首先需要什么呢?

 

根据前面说的知识,要开发的新语言相当于CIL的高级语言版本,所以实际上要做什么并不是由新语言决定的,而是由CIL来决定的.


因此,需要一套CIL的定义,规则或者标准.这套规则定义了我们的语言可以做什么,不可以做什么,具有哪些特性.这套规则就是CTS(Common Type System,公共类型系统).


任何满足了这套规则的高级语言都可以称为面向.NET框架的语言.


C#VB.Net不过是微软自己开发的一套符合了CTS的语言.实际上还有很多的组织或团队也开发出了这样的语言,比如Delphi.NET,FORTRAN.

 

那么CTS具体包括哪些内容呢?在回答这个问题之前需要先明白一个概念,先看一个类:

public class Book  {  }          Book item1 = new Book();          Book item2 = new Book();  


对于以上代码,通常是这么描述的:定义了一个Book,并且创建了两个Book类的实例item1,item2.实际上,这只包含了两层含义.其实还有一个更高的层面,那就是Book这个类的类型,我们称之为类类型(Class Type).

 

类似的,还有枚举类型(Enum Type),结构类型(Struct Type).现在大家应该明白这里想说啥了吧,CTS规定了可以在语言中定义诸如类,结构,委托等类型,这些规则定义了语言中更高层次的内容.因此,C#这个具体的语言实现中,我们才可以去定义类类型(Class Type)或者结构类型(struct Type).

 

同样,可以在Book类中定义一个字段name并提供一个方法ShowName().实际上,这些也是CTS定义的,它规范了类型中可以包含字段(field),属性(property),方法(method),事件(event).

 

除了定义各种类型外,CTS还规定了各种访问性,比如private,public,family(C#中为protected),Assembly(C#中为internal),,family and assembly(C#中没有对应的实现),family or assembly(C#中为protected internal).

 

CTS还定义了一些约束,例如,所有类型都隐式的继承自System.Object类型,所有类型都只能继承自一个基类.CTS的名称和公共类型系统可以看出,不仅C#语言要满足这些约束,所有面向.NET的语言都需要满足这些约束.众所周知,传统C++是可以继承自多个基类的.为了让熟悉C++语言的朋友也能在.NET框架上开发应用程序,微软推出了面向.NETC++/CIL语言(也叫做托管C++,这样你是不是又明白了一个概念),它就是符合CTSC++改版语言,为了满足CTS规则,它被限制为了只能继承自一个基类.

 

关于上面的内容有两点需要特别说明:

(1).C#并没有提供Family and assembly的实现,C#中也没有全局方法(就是你把方法写在类的外面是不对的),换句话,C#知识实现了CTS的一部分功能.CTS规范了语言能够实现的所有能力,但是符合CTS规范的具体语言实现不一定要实现CTS规范所定义的全部功能.

(2)C++/CIL又被约束为只能继承自一个基类,换句话,C++中的部分功能被删除了.这就说明,任何语言只要符合CTS,其中与CTS不兼容的部分功能都要舍弃.

 

 

显然,由于CIL.NET运行时所能理解的语言,因此它实现了CTS的全部功能.虽然它是一种低级语言,但是实际上,它所具有的功能更加完整.C#语言和CIL的关系,可以用下图表示:


0 0