CLS----公共语言规范
来源:互联网 发布:cname 增加域名绑定 编辑:程序博客网 时间:2024/05/13 06:51
转自:http://blog.csdn.net/shanyongxu/article/details/50889679,请点击链接查看原文,尊重楼主大大的版权。
CLS----公共语言规范
前面说过了关于CTS是一套语言的规则定义,就可以开发一套语言来符合CTS了.假设你新开发的言叫做N#,它所实现的CTS非常有限,仅实现了其中很少的一部分功能,它与CTS和C#语言的关系可能如图这样:
那么现在就有一个问题:由C#编写的程序集,能够引用由N#编程的程序集吗?肯定不能,虽然C#和N#同属于CTS旗下,但是它们并没有共同之处,因此虽然单独的N#或C#程序可以完美的在.NET框架下运行,但是它们之间却无法相互引用.如果使用N#开发项目的开发者本来就不希望其它语言类型的项目来引用他的项目倒也罢了,但是,如果N#项目期望其他语言类型的项目能够对它进行引用,就需要N#中公开的类型和功能满足C#语言的特性,即它们需要有共通之处.注意,这句话中的有一个词很重要,就是”公开的”(public).N#中不公开的部分(private,internal,protected)是不受影响的,可以使用独有的语言特性,因为这些不公开的部分本来就不允许外部进行访问.因此,如果N#想要被C#所理解和引用,它公开的部分就要满足C#的一些规范,此时它与CTS和C#语言的关系就变成这样了:
如果世界上仅有两种语言就好办了,把它们共同的语言特性提取出来,然后要求所有公开的类型都满足这些语言特性,这样C#和N#程序集就可以相互引用了.可问题是:语言类型有上百种,并且.NET的设计目标是实现一个开放的平台,不仅现有的语言经过简单的修改就能够在.NET框架上运行,后续开发的新语言也可以,而新语言此时并不存在,如何提取它的语言特性?因此又需要一套规范和标准来定义一些常见的,大多数语言都共有的语言特性.对于未来的新语言,只要它公开的部分能够满足这些规范,就能够被其他语言的程序集所使用.这个规范就叫做CLS(Common Language Specification,公共语言规范).很明显,CLS是CTS的一个子集.现在引入了CLS,关系图就变了:
如果利用C#开发的一个程序集的公开部分仅采用了CLS中的特性,那么这个程序集就较早CLS兼容程序集.显然,对于上面提到的FCL框架类库,其中的类型都符合CLS,仅有极个别类型的成员不符合CLS,这就保证了所有面向.NET的语言都可以使用框架类库中的类型.
大家如果对啥叫”语言特性”感兴趣的话,我可以稍微说一下,所谓的语言特性无非就是一些规定:是否区分大小写,标识符的命名规则如何,可以使用的基本类型有哪些,构造函数的调用方式(是否会调用基类构造函数),支持的访问修饰符等.
那么我们如何检验程序集是否符合CLS呢?.NET为我们提供了一个特性CLSCompliant,便于在编译时检查程序集是否符合CLS.关于CLSCompliant的内容,应为楼主了解的不多,这里不多说了.
- CLS----公共语言规范
- CLS----公共语言规范
- 关于“跨语言调用”和“CLS(公共语言规范)”的一点体会
- 【转】CLS(公共语言规范)的CLSCompliant(跨语言调用)
- CLS规范
- 公共语言规范
- 符合CLS的.NET语言
- Effective C#: 3.尽量使自定义的类型与公共语言规范兼
- 公共语言运行时
- CIL----公共中间语言
- CIL----公共中间语言
- 【R语言】【规范】编程规范
- cSystemHook.cls
- 什么是CLS?
- cls.c
- struct CLS
- clsJPWordDeal.cls
- system("cls")
- EOJ-大学生程序设计邀请赛(华东师范大学)-E-黑心啤酒厂
- 使用MyEclipse工具快速搭建Struts2框架
- freemarker标签库说明
- 2015年度众创空间服务补贴评估结果公示
- 1 Java引用介绍
- CLS----公共语言规范
- 在控制台上写一个简单的数据库增删改查系统
- EOJ-大学生程序设计邀请赛(华东师范大学)-C-袋鼠妈妈找孩子
- Hibernate 错误java.lang.String cannot be cast to java.lang.Intege 和连接查询问题
- 001.不要做的事
- ArraryList<T>等中T为int时 出现错误解决,以及java包装类型解释
- js中对函数设置默认参数的3种方法
- EOJ-大学生程序设计邀请赛(华东师范大学)-F-丽娃河的狼人传说
- 移动端分类界面 分屏