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框架上开发应用程序,微软推出了面向.NET的C++/CIL语言(也叫做托管C++,这样你是不是又明白了一个概念),它就是符合CTS的C++改版语言,为了满足CTS规则,它被限制为了只能继承自一个基类.
关于上面的内容有两点需要特别说明:
(1).C#并没有提供Family and assembly的实现,C#中也没有全局方法(就是你把方法写在类的外面是不对的),换句话,C#知识实现了CTS的一部分功能.CTS规范了语言能够实现的所有能力,但是符合CTS规范的具体语言实现不一定要实现CTS规范所定义的全部功能.
(2)C++/CIL又被约束为只能继承自一个基类,换句话,C++中的部分功能被删除了.这就说明,任何语言只要符合CTS,其中与CTS不兼容的部分功能都要舍弃.
显然,由于CIL是.NET运行时所能理解的语言,因此它实现了CTS的全部功能.虽然它是一种低级语言,但是实际上,它所具有的功能更加完整.C#语言和CIL的关系,可以用下图表示:
- CTS----公共类型系统
- CTS----公共类型系统
- CTS类型系统
- 通用类型系统(CTS)
- --通用类型系统(CTS)--一些笔记
- C#语言cts类型
- C# CTS类型详解
- Android CTS 系统测试
- Cts框架解析(20)-cts自身log系统
- CTS
- cts
- CTS
- CTS
- cts 检查系统有哪些功能
- ubuntu14.04系统下安装cts环境
- 公共自行车租赁系统
- C# 预定义基本类型 与 CTS对应
- Cts框架解析(16)-logcat信息收集系统
- webpack 优质文章汇总
- 查看文件或者端口被哪个进程占用
- 多态
- 乱码
- 解决Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not ac
- CTS----公共类型系统
- 01. 恢复出厂及登录 ❀ 深信服上网行为管理
- 设计模式之创建性模式
- Vue-cli的介绍与安装
- java8 双冒号运算符::
- axios 优质文章汇总
- MyEclipse配置Hibernate
- express 优质文章汇总
- ionic2项目开发日志 -- 01创建项目