zoukankan      html  css  js  c++  java
  • 什么是CTS、CLS和CLR

    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:DavidNET 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的程序需要符合的最小规范集。

  • 相关阅读:
    杭电1312--Red and Black(Dfs)
    杭电1102--Constructing Roads(简单并查集)
    杭电1969--Pie(二分法)
    最小生成树:HDU1863-畅通工程
    并查集:HDU1213-How Many Tables(并查集最简单的应用)
    并查集:HDU5326-Work(并查集比较简单灵活的运用)
    最小生成树:POJ1251-Jungle Roads(最小生成树的模板)
    图论:HDU2544-最短路(最全、最经典的最短路入门及小结)
    动态规划、记忆化搜索:HDU1978-How many ways
    记忆化搜索:POJ1088-滑雪(经典的记忆化搜索)
  • 原文地址:https://www.cnblogs.com/dxying/p/4015285.html
Copyright © 2011-2022 走看看