CTS,CLS,CLR解释

问题阐述

CTS、CLS和 CLR分别是什么意思? 专家解答

CTS、CLS和 CLR是.NET框架的 3个核心部分,下面分别对它们进行介绍。

(1)CTS CTS即通用类型系统,它定义了如何在.NET Framework运行库中声明、使用和管理类型,同时也是.NET Framework运行库支持跨语言集成的一个重要组成部分。通用类型系统主要执行以下功能: .建立一个支持跨语言集成、类型安全和高性能代码执行的框架。 .提供一个支持完整实现多种编程语言的面向对象的模型。 .定义各语言必须遵守的规则,有助于确保用不同语言编写的对象能够发生交互作用。

.NET Framework类库中的通用类型系统支持两种类别的类型,分别为值类型和引用类型,下面分别对它们进行简单介绍。

? 值类型

值类型直接包含它们的数据,值类型的实例要么在堆栈上,要么内联在结构中。值类型可以是内联的(由运行库实现)、用户定义的或枚举的。

? 引用类型

引用类型存储对值的内存地址的引用,位于堆上。引用类型可以是自描述类型、指针类型或接口类型。引用类型的类型可以由自描述类型的值来确定,自描述类型进一步细分成数组和类类型,类类型是用户定义的类、装箱的值类型和委托。图 1.1 显示了通用类型系统的一般结构。

图 1.1 通用类型系统的结构

(2)CLS

CLS 即公共语言规范,它是许多应用程序所需的一套基本语言功能。CLS 规则定义了通用类型系统的子集,即所有适用于公共类型系统的规则都适用于 CLS,除非 CLS 中定义了更严格的规则。CLS 通过定义一组开发人员可以确信在多种语言中都可用的功能来增强和确保语言的互用性。CLS 还建立了 CLS 遵从性要求,可帮助用户确定托管代码是否符合 CLS 以及一个给定的工具对托管代码(该代码是使用 CLS 功能的)开发的支持程度。

CLS 在设计上足够大,可以包括开发人员经常需要的语言构造;同时也足够小,大多数语言都可以支持它。此外,任何不可能快速验证代码类型安全性的语言构造都被排除在CLS 之外,以便所有符合 CLS 的语言都可以生成可验证的代码。

(3)CLR

CLR 即公共语言运行库,是.NET Framework 的基础,可以将其看作一个在执行时管理代码的代理,它提供了内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。

公共语言运行库用于管理内存、线程执行、代码执行、代码安全验证、编译以及其他系统服务,这些功能是在公共语言运行库上运行的托管代码所固有的。至于安全性,则取决于包括托管组件的来源(如 Internet、企业网络或本地计算机)在内的一些因素,由于托管组件被赋予不同程度的信任,这意味着即使用在同一活动应用程序中,托管组件可能执行文件访问操作、注册表访问操作或其他须小心使用的功能,也可能不能够执行这些功能。

公共语言运行库还通过实现称为通用类型系统(CTS)的严格类型验证和代码验证基础结构来加强代码可靠性。CTS确保所有托管代码都可以自我描述。微软和第三方语言编译器生成符合 CTS的托管代码,这意味着托管代码可在严格实施类型保护和类型安全的同时使用其他托管类型和实例。

专家点评

CTS(Common Type System)是通用类型系统,主要用于解决不同语言的数据类型不同的问题,它是一种类型标准,在这个标准中不但实现了 COM的变量兼容类型,还定义了通过用户自定义类型的方式来进行类型扩展,所有以.NET平台为目标的语言通过建立本身数据类型与CTS之间的映射来实现与其他语言的数据类型的交互。 CLS(Common Language Specification)是公共语言规范,主要用于实现多种语言之间的互操作性,是公共语言运行库的子集。 CLR(Common Language Runtime)是公共语言运行库,是所有.NET应用程序运行时的环境,所有应用程序都要使用的编程基础,它如同一个支持.NET应用程序运行和开发的虚拟机。

源地址:https://zhidao.baidu.com/special/view?id=c8735a24626975510400

有时候面试题会问:string和String的区别还有int和Int32的区别?

答:string是C#的数据类型而String是CTS中的数据类型

int也是C#的数据类型而Int32是CTS中的数据类型!

原文地址:https://www.cnblogs.com/sandaman2019/p/11388033.html

时间: 2024-10-03 23:15:46

CTS,CLS,CLR解释的相关文章

什么是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT

什么是.NET? 起源:比尔盖茨在2000年的Professional Developers Conference介绍了一个崭新的平台叫作Next Generation Windows Service,也就是后来的.NET. 软件层:.NET可以被看作是介于操作系统和编程语言之间的软件层,它可以支持多种编程语言,包括C#,VB.NET,C++,F#,等等. 用来产生托管代码的框架.平台:传统的编译方式是"源代码→编译→可执行文件",在.NET中编译方式是"源代码→编译→程序集

CTS,CLS,CLR

1)CTS通用类型系统(Common Type System) CTS不但实现了COM的变量兼容类型,而且还定义了通过用户自定义类型的方式来进行类型扩展.任何以.NET平台作为目标的语言必须建立它的数据类型与CTS的类型间的映射.所有.NET语言共享这一类型系统,实现它们之间无缝的互操作.该方案还提供了语言之间的继承性.例如,用户能够在VB.NET中派生一个由C#编写的类.我们可以将CTS 看成是所有.NET 语言的superset (union),而符合CTS 的各种不同的语言,其实都只是CT

.NET Framework (代码库、通用类型系统CTS、CLR) 简介

编译C#————>程序集(.exe..dll[MSIL]).元信息[数据信息].可选资源[图片.声音]) |                     | |                     (Microsoft Intermediate Language 微软中间语言) | | JIT编译 (Just-In-Time 仅在需要时才编译MSIL) | ——> 机器代码 <———— .NET CLR (Common Language Runtime 公共语言运行时) 运行     /

挑战一下吧!C#测试开发工程师英语面试题

1. Given a rectangular (cuboidal for the puritans) cake with a rectangular piece removed (any size or orientation), how would you cut the remainder of the cake into two equal halves with one straight cut of a knife?2. Given an array of size N in whic

复习.Net高级

索引器:本质是封装了get,set方法,可以是只读或只写(在get或set前加上private),字符串是只读索引. 密闭类与静态类: 第一.密闭类是修饰为sealed的类,sealed不能有子类.String类无法被继承,因为String被声明了sealed. 第二.声明为static的类,不能实例化,只能定义static成员.通常用它定义扩展方法. 第三.C#3.0特性:扩展方法.声明静态类,增加一个静态方法,第一个参数是被扩展类型的标记为this,然后在其他类中可以直接调用. 1 stat

C#经典面试题及答案

1.请你说说.net 中类和结构的区别? 答:结构和类具有大体的语法,但是结构受到的限制比类多.结构不能声明默认的的构造函数,为结构的副本是编译器创建和销毁的,所以不需要默认的构造函数和析构函数,结构是值类型.所以对结构变量所做的改变不会影响其的原值,而类是应用类型.改变其变量的值会改变其原值,声明结构用关键字struct关键字,声明类用class关键字,向方法传递结构是通过值传递的,而不是通过引用.与类不同,结构的实例化可以不使用New关键字.类可以实现接口. 2.死锁的必要条件?怎么克服?

.NET学习笔记 -- 那堆名词到底是啥(CLR、CLI、CTS、CLS、IL、JIT)

什么是CLR? CLR,公共语言运行时(Common Language Runtime)是一个由多种语言使用的“运行时”.他的核心功能包括(内存管理.程序集加载.安全性.异常处理和线程同步),可以被面向CLR的所有语言使用.这里的“运行时”,就是一个运行时环境,就像JAVA虚拟机一样.哦,错了,确切的说是JRE(Java  Runtime Enviromental).JVM确切的说不是一个实体的java虚拟机,而是一个规范,就像CLI一样.会有不同的实现,如:JRockit还是Hotspot(前

初入 CLR - 阅读《CLR via C#》笔记

最近买了一本书<CLR via C#>阅读了第一章 - CLR 的执行模型,对 .NET 一直提到的 CLR 和 .NET Framework 有了一个大致的了解.我理解主要体现在: ■ 各种术语有了一个大致的体会:CTS CLS 和 CLI .CLR 与 .NET Framework. IL(Intermediate Language) .CIL(Common Intermediate Language)和 托管代码(Managed Code). ■ 用 C# 写完一个程序被编译成应用程序后

CLR 对比 JVM

首先,CLR和JAVA虚拟机(Java Virtual Machine,简称:JVM)并非一个层面的系统.前者可松散地被描述为just-in-time(JIT)优化编译器和垃圾收集器的混合物,而后者仅仅是一个解释器: 其次,早先的JVM使用的是第一代解释器原理,先将java源代码编译成字节码(bytecode),然后通过JVM对bytecode进行实时解释.它是在程序使用的时间解释执行,每次执行都需要重新解释并执行.而CLR是先通过内置的相应语言的编译器将源代码编译为CIL中间代码,然后在程序第