.NET基础 (01).NET基础概念
.NET基础概念
1 什么是CTS、CLS和CLR
2 开发和运行.NET程序需要的最基本环节是什么
3 .NET是否支持多编程语言开发
4 CLR技术和COM技术的比较
5 什么是程序集和应用程序域
缩写的全称:
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框架,指的就是公共语言运行库。
开发.NET程序需要一个文本编辑器和一个针对编码语言的编译器,对于C#来说,最常用的编译器是csc.exe。而运行.NET程序,需要的是安装.NET Framework组件。 Visual Studio作为IDE并不是必须的。
.NET支持多编程语言的开发,但所有设计必须符合CLS规范以保证编程语言之间的特性差异不会产生运行时的差异。
COM技术已经没落了。CLR和COM都定义了组件间交互的规范。COM并没有定义如何描述组件间的依赖性,而且由于其严格的物理约定,造成了很多组件版本升级和控制的问题。CLR运用元数据和逻辑类型定义等机制,有效地解决了COM遗留的一些问题。CLR更容易理解和学习。
程序集(Assembly)是一个或多个模块和资源文件的集合。当一个程序集被打包形成时,它不仅仅包含所有的原始文件内容,也会添加一个程序集清单,该清单包含了程序集的版本号、语言、发布者、导入类型等信息。程序集清单可以被添加到程序集的某个文件上,编译器也可以为程序集清单创建一个单独的文件。
程序集概念的引用给系统带来了很大的灵活性。
1)程序集支持多编程语言开发,就是一个程序集可以包含由不同编程语言定义和实现的模块。在程序集被编译形成时,所有这些类型已经被编译成中间代码,而不再带有原来编程语言的特性。
2)程序集运行逻辑分布和物理分布分离。这样虽然同属于一个逻辑程序集,各种类型和资源仍然可用分布在不同的物理文件里。这大大提高了系统部署的灵活性。例如,程序员可以把某个程序集分成4个文件,分别包含基本类型定义、基本HELP文档、可选类型定义和可选HELP文档。这样部署该系统时,可以让用户选择需要的功能,并且按照用户的选择从服务器下载必要的文件来组成程序集。
包含了程序集清单的那个文件对使用该程序集来说是必须的。
程序集是一个逻辑上的概念,而不是指一个或几个物理文件或者代码段。
在操作系统中,一个普通的应用程序通常占据一个操作系统的进程。操作系统的进程为应用程序提供了独立的内存空间,规定了代码的执行范围,并且提供了错误隔离机制。在.NET框架中,应用程序域(APPDomain) 提供了和操作系统进程非常类似的功能。一个在CLR中运行的应用程序,至少拥有一个应用程序域。和操作系统的进程相同,应用程序提供了代码的执行范围,并且为程序提供隔离。在多个应用程序域间通信是非常困难的,每个类型实例都会存放在一个应用程序域内,并且,所有域内的引用必须引用自己所在应用程序域的对象。
和操作系统不同的是,应用程序域的创建和销毁所需要的开销会相对较小。当然,CLR仍然在操作系统上运行,所以某个应用程序域必定运行在某个系统的进程内,在CLR的安排下,每个操作系统的进程可以包含多个应用程序域。
程序集(Assembly)是一个由类型定义、数据文件和资源文件组成的逻辑集合。每个程序集都包含一个程序集清单,该清单通常被附加在某个文件头上,也可以单独建立一个文件来包含该清单。
应用程序域是CLR中提供代码运行范围、操作隔离和安全设置隔离的逻辑单元,功能类似于操作系统的进程。一个或多个应用程序域在一个操作系统中运行。应用程序域的创建和销毁所需的开销,相对于操作系统进程较小。但和操作系统进程一样,应用程序域之间的数据共享相当困难。
转载请注明出处: