zoukankan      html  css  js  c++  java
  • .NET基础 (01).NET基础概念

    .NET基础概念

    1 什么是CTS、CLS和CLR
    2 开发和运行.NET程序需要的最基本环节是什么
    3 .NET是否支持多编程语言开发
    4 CLR技术和COM技术的比较
    5 什么是程序集和应用程序域

     
    1 什么是CTS、CLS和CLR

    缩写的全称:
         CTS是通用类型系统(Common Type System)

         CLS是公共语言规范(Common Language Specification)

         CLR是公共语言运行时(Common Language Runtime)

          所有类型都可以在 CTS中声明。CTS定义了一组语言编译器必须遵循的规则,以定义、引用、使用和存储引用类型和值类型。因此,遵循CTS,在不同语言中编写的对象才能彼此交互。但并不是所有的类型都可以用于所有的语言。要建立可以在所有.NET语言中访问的组件,就要使用CLS。有了CLS,编译器就可以根据CLS检查代码是否有效。

          任何支持.NET的语言都不仅仅局限于CLS定义的公共功能子集。甚至有了.NET,仍可以创建不能在不同语言中使用的组件。这就是说,利用.NET支持所有的语言比利用COM简单得多。如果把自己限制在CLS之内,就可以保证组件可以在所有的语言中使用。第三方编写的库很可能限制在CLS之内,以确保该库可以在所有的语言中使用。

          .NET Framework是为了支持多种语言而设计的。在设计.NET的阶段中,Microsoft让许多编译器开发商建立它们自己的.NET语言。Microsoft自己就发布了VB.NET、Managed C++、C#、J#和JScript.NET。另外,不同开发商开发了40多种语言,例如Cobol、Smalltalk、Perl和 Eiffel。每种语言都有其特有的优点和许多不同的功能。这些语言的编译器都进行了扩展,以支持.NET。

    提示:
          CLS是一种语言必须支持的最小规范要求。如果把公共方法限制为CLS,那么支持.NET的所有语言就都可以使用我们的类!

          在.NET Framework中,几乎所有(但不是所有)的类都是与CLS兼容的。在MSDN文档说明中,不兼容的类和方法都被特别标记为不兼容,例如System命名空间中的UInt32结构。UInt32表示32位无符号整数。并不是所有的语言(例如Visual Basic.NET或J#)都支持无符号的数据类型,这种数据类型是与CLS不兼容的。

      CLR是一个包含运行.NET程序的引擎和一堆符合公共语言基础结构的类库的集合。CLR是一个规范的实现,几乎所有的.NET程序都基于CLR的类库来实现,并且运行在CLR提供的运行引擎之上。所谓的.NET框架,指的就是公共语言运行库。


    2 开发和运行.NET程序需要的最基本环境是什么

    开发.NET程序需要一个文本编辑器和一个针对编码语言的编译器,对于C#来说,最常用的编译器是csc.exe。而运行.NET程序,需要的是安装.NET Framework组件。 Visual Studio作为IDE并不是必须的。


    3 .NET是否支持多编程语言开发

     .NET支持多编程语言的开发,但所有设计必须符合CLS规范以保证编程语言之间的特性差异不会产生运行时的差异。


    4 CLR技术和COM技术的比较

     COM技术已经没落了。CLR和COM都定义了组件间交互的规范。COM并没有定义如何描述组件间的依赖性,而且由于其严格的物理约定,造成了很多组件版本升级和控制的问题。CLR运用元数据和逻辑类型定义等机制,有效地解决了COM遗留的一些问题。CLR更容易理解和学习。


    5 什么是程序集和应用程序域

    程序集(Assembly)是一个或多个模块和资源文件的集合。当一个程序集被打包形成时,它不仅仅包含所有的原始文件内容,也会添加一个程序集清单,该清单包含了程序集的版本号、语言、发布者、导入类型等信息。程序集清单可以被添加到程序集的某个文件上,编译器也可以为程序集清单创建一个单独的文件。

    程序集概念的引用给系统带来了很大的灵活性。

    1)程序集支持多编程语言开发,就是一个程序集可以包含由不同编程语言定义和实现的模块。在程序集被编译形成时,所有这些类型已经被编译成中间代码,而不再带有原来编程语言的特性。

    2)程序集运行逻辑分布和物理分布分离。这样虽然同属于一个逻辑程序集,各种类型和资源仍然可用分布在不同的物理文件里。这大大提高了系统部署的灵活性。例如,程序员可以把某个程序集分成4个文件,分别包含基本类型定义、基本HELP文档、可选类型定义和可选HELP文档。这样部署该系统时,可以让用户选择需要的功能,并且按照用户的选择从服务器下载必要的文件来组成程序集。

    包含了程序集清单的那个文件对使用该程序集来说是必须的。

    程序集是一个逻辑上的概念,而不是指一个或几个物理文件或者代码段。

    在操作系统中,一个普通的应用程序通常占据一个操作系统的进程。操作系统的进程为应用程序提供了独立的内存空间,规定了代码的执行范围,并且提供了错误隔离机制。在.NET框架中,应用程序域(APPDomain) 提供了和操作系统进程非常类似的功能。一个在CLR中运行的应用程序,至少拥有一个应用程序域。和操作系统的进程相同,应用程序提供了代码的执行范围,并且为程序提供隔离。在多个应用程序域间通信是非常困难的,每个类型实例都会存放在一个应用程序域内,并且,所有域内的引用必须引用自己所在应用程序域的对象。

    和操作系统不同的是,应用程序域的创建和销毁所需要的开销会相对较小。当然,CLR仍然在操作系统上运行,所以某个应用程序域必定运行在某个系统的进程内,在CLR的安排下,每个操作系统的进程可以包含多个应用程序域。

    程序集(Assembly)是一个由类型定义、数据文件和资源文件组成的逻辑集合。每个程序集都包含一个程序集清单,该清单通常被附加在某个文件头上,也可以单独建立一个文件来包含该清单。

    应用程序域是CLR中提供代码运行范围、操作隔离和安全设置隔离的逻辑单元,功能类似于操作系统的进程。一个或多个应用程序域在一个操作系统中运行。应用程序域的创建和销毁所需的开销,相对于操作系统进程较小。但和操作系统进程一样,应用程序域之间的数据共享相当困难。

    转载请注明出处:

    作者:JesseLZJ
    出处:http://jesselzj.cnblogs.com

  • 相关阅读:
    poj 2528 Mayor's posters (线段树+离散化)
    poj 1201 Intervals (差分约束)
    hdu 4109 Instrction Arrangement (差分约束)
    poj 1195 Mobile phones (二维 树状数组)
    poj 2983 Is the Information Reliable? (差分约束)
    树状数组 讲解
    poj 2828 Buy Tickets (线段树)
    hdu 1166 敌兵布阵 (树状数组)
    Ubuntu网络配置
    Button控制窗体变量(开关控制灯的状态)
  • 原文地址:https://www.cnblogs.com/jesselzj/p/4781953.html
Copyright © 2011-2022 走看看