`
cloudtech
  • 浏览: 4578934 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

什么是CTS、CLS和CLR

 
阅读更多
什么是CTS、CLS和CLR
本文节选自《.NET程序员面试指南》一书

CTS、CLS和CLR是.NET框架的基本概念,但往往成为程序员们忽视的部分。清楚理解三者的概念,有助于.NET程序员编写高效安全的.NET程序。
所涉及到的知识点
• .NET的基本概念
• CLS、CTS和常用语言的关系
分析问题
CLR的全称是公共语言运行库(Common Language Runtime),读者可以把CLR理解为一个包含运行.NET程序的引擎和一堆符合公共语言基础结构的类库的集合。CLR是一个规范的实现,我们开发的几乎所有的.NET程序都基于CLR的类库来实现,并且运行在CLR提供的运行引擎之上。所谓.NET框架,指的就是公共语言运行库。
公共语言基础(CLI)是微软公司向ECMA提交的一份语言和数据格式规范,CLR是目前为止唯一一个公共语言基础的实现版本。
CTS的全称是通用类型系统(Common Type System)。前文已经介绍了公共语言基础(CLI)的概念,微软公司提交的CLI规范,包括了公共类型系统(CTS)、公共中间语言(CIL)、底部文件格式以及元数据格式等。公共类型系统定义了一个能够在CLR上运行的语言规范。尽管有很多语言本身不符合CTS规范,但是通过加强编译器,改变语言附加规范等手段,使得许多语言能够编写出能在CLR上运行的程序。
一种语言编写的程序编译能够在CLR上运行,并不代表这种语言本身完全符合CTS的规范。例如C++语言,仍然保持了其不符合CTS规范的部分,并且在编译时把这部分不符合CTS的代码编译成原始代码而非中间代码。
最后来看一下CLS的概念。公共语言规范(CLS)是CTS的一个子集,它定义了希望编写在.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的关系
答案
公共语言运行库(CLR)是一个CLI的实现,包含了.NET运行引擎和符合CLI的类库。
通用类型系统(CTS)包含在微软公司提交的CLI规范中,定义了一个可以在CLR上运行的类型规范。
公共语言规范是CTS的一个子集,定义了所有面向.NET的程序需要符合的最小规范集。


5}J J l/m8rsm13164110
分享到:
评论

相关推荐

    .NET Framework中CTS、CLS、CLR

    关于.NET Framework中CTS、CLS、CLR的详细说明

    CLR study学习文档

    CLI:Common Language Infrastructure,公共语言基础结构,这是MS提交给ECMA的一个标准,由CTS和其他Framwork组件构成 CLS:Common Language Specfication,公共语言规范,详细规定了一个最小特性集

    NET框架详细介绍.docx

    要描述.NET框架,自然会遇到与其相关的一系列专业的技术术语和缩写,相信大家已经见到过许多了,比如:CLI、CIL、CTS、CLS、CLR、JIT、BCL、FCL、Module、Assembly 等,足以让很多人一头雾水、望而却步。笔者不会像...

    C# .NET 课件 最好的

    CTS定义声明、定义和管理所有类型所遵循的规则,而无需考虑源语言 CLS是所有针对 .NET的编译器都必须支持的一组最低标准,以确保语言的互操作性 命名空间是一组包含相关方法的相似类,专门用于避免类与类之间的...

    .NET面试题终极版

    一. 基础知识 1 1.CTS、CLS和CLR分别作何解释 1 2.什么是受管制的代码 1 3.什么是托管代码 1 4.值类型和引用类型的区别 1 5.简述private、protected、public、 internal修饰权限 1

    程序员面试宝典(第三版)

    CTS、CLS和CLR分别作何解释? 答:装箱就是把值类型转成引用类型,从MS IL角度看好像是boxing,没记错的话是把值从堆栈转到堆中.拆箱相反,重载就是指一个方法名同,参数个数不同,返回值可以相同的方法.CLR是通用语言运行...

    很全的.net面试题目(无毒免分下载)

    CTS、CLS和CLR分别作何解释? 答:装箱就是把值类型转成引用类型,从MS IL角度看好像是boxing,没记错的话是把值从堆栈转到堆中.拆箱相反,重载就是指一个方法名同,参数个数不同,返回值可以相同的方法.CLR是通用语言运行...

    .NET工程师笔试题高级

    11.CTS、CLS. CLR分别作何解释? 12.PDB是什么东西?在调试中它应该放在哪里? 13.C#中Params是什么含义?有何用途? 14.说说对http 301.302. 303, 304、400. 405、 415状态码的认识; 15.请使用C#的相关知识,封装一个...

    C#.Net的常见面试试题

    CTS、CLS和CLR分别作何解释? <br/>4.列举一下你所了解的XML技术及其应用 <br/>5.值类型和引用类型的区别?写出C#的样例代码。 <br/>6.ADO.net中常用的对象有哪些?分别描述一下。 <br/>7.如何理解...

    C#考试题目大全C#考试题目大全

    A.CLR(公共语言运行库) B.CLS(公共语言规范) C.MSIL(微软中间语言) D.CTS(通用类型系统) 2. 在 Visual Studio.NET窗口中,在__________窗口中可以察看当前项目的类和类型的层次 信息。(B) A.解决方案资源管理器 B....

    彻底征服.Net编译运行原理 - 02_软件概述_bs与cs.rar

    彻底征服.Net运行和编译原理:.Net Framework深入手动编译、CLR、CLS、CTS、JIT等。

    彻底征服.Net编译运行原理

    ①彻底征服.Net运行和编译原理:.Net Framework深入手动编译、CLR、CLS、CTS、JIT等。

    asp.net面试题

    CTS、CLS和CLR分别作何解释? 答:装箱就是把值类型转成引用类型,从MS IL角度看好像是boxing,没记错的话是把值从堆栈转到堆中.拆箱相反,重载就是指一个方法名同,参数个数不同,返回值可以相同的方法.CLR是通用语言...

    C#考试题目大全(共167页)

    A.CLR(公共语言运行库) B.CLS(公共语言规范) C.MSIL(微软中间语言) D.CTS(通用类型系统) 2. 在 Visual Studio.NET 窗口中,在__________窗口中可以察看当前项目的类和类型的层次 信 A.解决方案资源管理器 B.类...

    【。net 专业】 面试题

    CTS、CLS和CLR分别作何解释? 答:装箱就是把值类型转成引用类型,从MS IL角度看好像是boxing,没记错的话是把值从堆栈转到堆中.拆箱相反,重载就是指一个方法名同,参数个数不同,返回值可以相同的方法.CLR是通用语言运行...

    C#与.NET3.5高级程序设计(第4版) 中文1

    1.3 NET平台构造块(CLR、CTS和CLS)简介 5 1.4 其他支持.NET的编程语言 7 1.5 NET程序集概览 8 1.6 CTS 13 1.7 CLS 16 1.8 CLR 17 1.9 程序集/命名空间/类型的区别 19 1.10 使用ildasm.exe探索程序集...

    CSDN 微软技术高级讲师.NET技术企业高级培训PPT

    16. 多语言支持和语言互操作的基础 -CLS 和 CTS公共语言规范 17. 应用程序域 18. 程序集的一些基本概念 19. C# 语言的优点 20. 认识我们的开发利器visual studio 2008 Team 第二部分 WindowsForm(2天) (1...

    java面试题

    答:CTS 通用类型系统、CLS 通用语言规范、CLR 公共语言运行时。 Struts1和Struts2原理和区别? 答:Struts1和Struts2是两个完全不同的框架,Struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的...

    dot NET技术企业高级培训PPT

    16. 多语言支持和语言互操作的基础 -CLS 和 CTS公共语言规范 17. 应用程序域 18. 程序集的一些基本概念 19. C# 语言的优点 20. 认识我们的开发利器visual studio 2008 Team 第二部分 WindowsForm(2天) (1...

Global site tag (gtag.js) - Google Analytics