什么是CTS、CLS和CLR
来源:互联网 发布:高等机构学 矩阵变换 编辑:程序博客网 时间:2024/06/06 02:21
CLR:公共语言运行库(Common Language Runtime)是一个CLI的实现,包含了.NET运行引擎和符合CLI(公共语言基础结构)的类库。
CLR是一个规范的实现,我们开发的几乎所有的.NET程序都基于CLR的类库来实现,并且运行在CLR提供的运行引擎之上。所谓.NET框架,指的就是公共语言运行库。[个人觉得说的不妥]
这是.NET Framework的核心,是驱动关键功能的引擎。它包括数据类型的公共系统等。这些公共类型和标准接口约定使跨语言继承成为可能。除了内存的分配和管理之外,CLR还负责对象引用的跟踪,处理垃圾回收。
公共语言基础(CLI)是微软公司向ECMA提交的一份语言和数据格式规范,CLR是目前为止唯一一个公共语言基础的实现版本。
通用类型系统(CTS)(Common TypeSystem):包含在微软公司提交的CLI规范中,定义了一个可以在CLR上运行的类型规范。
前文已经介绍了公共语言基础(CLI)的概念,微软公司提交的CLI规范,包括了公共类型系统(CTS)、公共中间语言(CIL)、底部文件格式以及元数据格式等。公共类型系统定义了一个能够在CLR上运行的语言规范。尽管有很多语言本身不符合CTS规范,但是通过加强编译器,改变语言附加规范等手段,使得许多语言能够编写出能在CLR上运行的程序。
一种语言编写的程序编译能够在CLR上运行,并不代表这种语言本身完全符合CTS的规范。例如C++语言,仍然保持了其不符合CTS规范的部分,并且在编译时把这部分不符合CTS的代码编译成原始代码而非中间代码。
公共语言规范(CLS) 是CTS的一个子集,定义了所有面向.NET的程序需要符合的最小规范集。
它定义了希望编写在.NET平台上运行的程序的语言所需符合的最小规范。正因为.NET允许由不同语言编写的程序一起执行,所以才制定出CLS规范,用以避免不同语言特性产生的错误。
为了更直观地理解CLS,来看这段C#代码:
代码2-1 CLS规范:CLS.cs
using System;
using System.Collections.Generic;
using System.Text;
//申明C符合CLS规范
[assembly:CLSCompliantAttribute(true)]
namespace NET.MST.Second
{
public class CLS
{
private uint i; //这是一个私有成员,所以不违反CLS规范
public CLS()
{
i=0;
}
static void Main(string[]args)
{
}
//这里不符合CLS规范,uint在CLS中没有定义
public uint GetI()
{
return i;
}
}
}
在代码2-1中,程序通过CLSCompliantAttribute特性来申明CLS类型需要符合CLS规范。C#中的uint类型在CLS中没有对应的类型,所以uint是不符合CLS的语言部分。在CLS类的一开始,程序定义了一个uint类型的私有成员变量i,这里并没有造成CLS类不符合CLS规范,因为私有变量只对类内部可见。而之后程序定义了一个返回uint类型的公共方法,这里造成了整个CLS类型不符合CLS规范。编译这段代码,会得到以下警告:
C:\David\NET MST\第章\CLS.cs(23,21): warning CS3002:Return type of 'NET.MST.Second.CLS.GetI()' is not CLS-compliant
现在,读者已经理解了CLS和CTS的关系
- 什么是CTS、CLS和CLR
- 什么是CTS, CLS和CLR
- 什么是CTS、CLS和CLR
- 什么是CTS、CLS和CLR
- IL和CLR,CTS和CLS
- CTS、CLS和CLR的关系
- C# .NET中的CTS、CLS和CLR
- .NET中的CTS、CLS和CLR
- .NET中的CTS、CLS和CLR
- .NET中的CTS、CLS和CLR
- C#.NET中的CTS、CLS和CLR
- .NET中的CTS、CLS和CLR
- C#.NET中的CTS、CLS和CLR
- .NET中的CTS、CLS和CLR
- CLR,CTS,CLS
- CLR.CTS,CLS定义
- CLR/CTS/CLS区别
- CLR, CTS and CLS
- 同步与异步
- 获取稀疏文件真实大小
- jQuery时间控件Datepicker汉化版使用详解
- oracle创建表空间,创建用户(转)
- JSP环境配置图文详解 初学者必备(1)
- 什么是CTS、CLS和CLR
- 音视频P2P交流技术
- 深入解析AsyncTask
- cookie的加强加深
- android:windowSoftInputMode默认adjustUnspecified(由系统决定是否弹软键盘)
- 2012年12月编程语言排行榜:Objective-C风暴来袭(1)
- 如何编写出优美的JavaScript代码?
- J2EE开发学习小结
- Hello Flex