什么是.NET和.NET Framework?

什么是.NET和.NET Framework?

什么是副本

本文大部分内容来自:王涛《你必须知道的.NET》

 

MSDN对.NET的定义为:.NET 是 Microsoft 面向XML Web 服务的平台,它使用一种统一的、个性化的方式将信息、设备和人员紧密地联系在一起。

看到这个概念,我们难以理解,先从.NET框架(.NET Framework)的组成说起。.NET框架由一个运行时环境和一个基类库组成。这里所说的运行时环境就是通用语言运行时(Commom Language Runtime, CLR),为了理解CLR,我们首先我们来看一个实例(本实例来自王涛:《你必须知道的.NET》):

小王以前是个VB 迷,写了一堆的VB.NET 代码,现在他变心了,就投靠C# 的阵营,因为流行嘛。所以当然就想在当前的基于C# 开发的项目中,应用原来VB.NET 现成的东西,省点事儿:-) 。学了.NET以后,小王轻松地实现了这件事,那么.NET是怎么办到的呢?这要归功于.NET的通用语言规范(CLS)和通用类型系统(CTS)了。

那么,什么是通用语言规范(CLS)和通用类型系统(CTS)?

CLS:Common Language Specification, 通用语言规范

.NET Framework将CLS定义为一组规则,所有.NET语言都应该遵循此规则才能创建与其他语言可互操作的应用程序。

CTS:Common Type System公共类型系统(又叫通用系统类型)

类似于COM定义的标准二进制格式,.NET定义了一个称为通用类型系统Common Type System(CTS)的类型标准。这个类型系统不但实现了COM的变量兼容类型,而且还定义了通过用户自定义类型的方式来进行类型扩展。任何以.NET平台作为目标的语言必须建立它的数据类型与CTS的类型间的映射。所有.NET语言共享这一类型系统,实现它们之间无缝的互操作。该方案还提供了语言之间的继承性。例如,用户能够在VB.NET中派生一个由C#编写的类。

过去,由于各个语言在类型定义方面的不一致,造成跨语言编程实现的难度,基于这一问题,.NET 中引入CTS 来解决各个编程语言类型不一致的问题,类型机制使得多语言的代码可以无缝集成。因此CTS 也成为.NET 跨语言编程的基础规范,为多语言的互操作提供了便捷之道。可以简单的说,基于.NET 的语言共同使用一个类型系统,这就是CTS。

进一步的探讨通用类型系统的内容,我们知道CTS 支持两种基本的类型,每种类型又可以细分出其下级子类,可以以下图来表示:

 

a

.NET 提供了丰富的类型层次结构,从上图中也可以看出该层次结构是基于单继承层次实现的,反映了.NET 面向对象原则中实现单继承、接口多继承的特点。

此外,我们还要知道中间语言(IL)的概念。IL是.NET框架中中间语言(Intermediate Language)的缩写。使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不是CPU能直接执行的机器代码,而是一种中间语言IL(Intermedate Language)的代码。

使用中间语言的优点有两点,一是可以实现平台无关性,既与特定CPU无关;二是只要把.NET框架某种语言编译成IL代码,就实现.NET框架中语言之间的交互操作。(《C#程序设计及应用教程》(第2版),马骏 主编)

接下来我们来理解CLR实现类型转换的具体的过程:CTS 定义了在MSIL 中使用的预定义数据类型,.NET 语言最终都要编译为IL 代码,也就是所有的类型最终都要基于这些预定义的类型,例如VB.NET 中Single 类型映射为IL 类型就是float32 ,而C# 中float 类型也映射为float32 ,由此就可以建立起VB.NET 和C# 的类型关系,为互操作打下基础。

CLR功能

CLR的功能(来源:Stephen C.Perry《C#和.NET核心技术》)

说完了CLR,接下来我们讲.NET框架的基类库。

基类库代表了.NET框架的核心。不管人们开发何种应用程序,BCL总是作为构建其他所有功能的起点。基类库目录位于系统目录下面的Lib目录,框架内置的有Think核心类库,还可以扩展ORG 、Com扩展类库。核心基类库的作用是完成框架的通用性开发而必须的基础类和常用工具类等,包含有:Think.Core 核心类库包;Think.Db 数据库类库包;Think.Exception 异常处理类库包;Think.Template 内置模板引擎类库包;Think.Util 系统工具类库包。

a

QQ2009的扩展类库

b

 Eclipse所包含的扩展类库

如下是.NET的基类库与.NET框架结构

 

.NET框架

小结:

.NET 技术可以以规范和实现两部分来划分,而我们经常强调和提起的.NET Framwork ,主要包括公共语言运行时(Common Language Runtime, CLR )和.NET 框架类库(Framework Class Library, FCL ),其实是对.NET 规范的实现。而另外一部分:规范,我们称之为公共语言架构(Common Language Infrastructure, CLI ),主要包括通用类型系统(CTS ),公共语言规范(Common Language Specification, CLS )和通用中间语言(Common Intermediate Language, CIL )。我们以图的形式来看看CTS 在.NET 技术阵营中的位置。

.NET的规范和实现

总结一下这些新名词:

CLI .NET 技术规范,已经得到ECMA (欧洲计算机制造商协会)组织的批准实现了标注化。 

CTS ,通用类型系统。 

CLS ,定义了CTS 的子集,开发基于CTS 的编译器,则必须遵守CLS 规则,由本文开头的图中就可以看出CLS 是面向.NET 的开发语言必须支持的最小集合。 

CIL ,是一种基于堆栈的语言,是任何.NET 语言编译产生的中间代码,我们可以理解为IL 就是CLR 的汇编语言。IL 定义了一套与处理器无关的虚拟指令集,与CLR/CTS 的规则进行映射,执行IL 都会翻译为本地机器语言来执行。IL 很类似于Java 世界里的字节码(Bytecode ),当然也完全不是一回事,最主要的区别是IL 是即时编译(Just in time, JIT )方式,而Bytecode 是解释性编译,显然效率上更胜一踌。 

NET Framework ,可以说是CLI windows 平台的实现,运行与windows 平台之上。 

CLR .NET 框架核心,也是本系列的核心。类似于Java 世界的JVM ,主要的功能是:管理代码执行,提供CTS 和基础性服务。对CLR 的探讨,将伴随着这个系列的成长来慢慢展开,在此就不多说了。 

FCL ,提供了一整套的标准类型,以命名空间组织成树状形式,树的根是System  

可见,这些基本内容相互联系,以简单的笔墨来澄清其概念、联系和功能,显然还不够力度。真正理解.NET,需要实践,需要时间,需要心思。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
 .NET Framework 是支持生成和运行下一代应用程序和 XML Web services 的内部 Windows 组件。.NET Framework 旨在实现下列目标:   提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在 Internet 上分布,或者是在远程执行的。   提供一个将软件部署和版本控制冲突最小化的代码执行环境。   提供一个可提高代码(包括由未知的或不完全受信任的第三方创建的代码)执行安全性的代码执行环境。   提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。   使开发人员的经验在面对类型大不相同的应用程序(如基于 Windows 的应用程序和基于 Web 的应用程序)时保持一致。   按照工业标准生成所有通信,以确保基于 .NET Framework 的代码可与任何其他代码集成。   .NET Framework 具有两个主要组件:公共语言运行库和 .NET Framework 类库。公共语言运行库是 .NET Framework 的基础。您可以将运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。.NET Framework 的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,您可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面 (GUI) 应用程序,也包括基于 ASP.NET 所提供的最新创新的应用程序(如 Web 窗体和 XML Web services)。   .NET Framework 可由非托管组件承载,这些组件将公共语言运行库加载到它们的进程中并启动托管代码的执行,从而创建一个可以同时利用托管和非托管功能的软件环境。.NET Framework 不但提供若干个运行库宿主,而且还支持第三方运行库宿主的开发。   .NET FrameworkMicrosoft为开发应用程序而创建的一个富有革命性的新平台。   这句话最有趣的地方是它的含糊不清,但这是有原因的。首先,注意这句话没有说“在Windows操作系统上开发应用程序”。尽管.NET FrameworkMicrosoft版本运行在Windows操作系统上,但以后将推出运行在其他操作系统上的版本,例如Mono,它是.NET Framework的开发源代码版本(包含一个C#编译器),该版本可以运行在几个操作系统上,包括各种Linux版本和Mac OS。许多这类项目正在开发,在读者阅读本书时可能就已发布了。另外,还可以在个人数字助手(PDA)类设备和一些智能电话上使用Microsoft .NET Compact Framework(基本上是完整 .NET Framework的一个子集)。使用.NET Framework的一个主要原因是它可以作为集成各种操作系统的方式。   另外,上面给出的.NET Framework定义并没有限制应用程序的类型。这是因为本来就没有限制。.NET Framework可以创建Windows应用程序、Web应用程序、Web服务和其他各种类型的应用程序。   .NET Framework的设计方式保证它可以用于各种语言,包括本书要介绍的C#语言,以及C++、Visual Basic、JScript,甚至一些旧的语言,如COBOL。为此,还推出了这些语言.NET版本,目前还在不断推出更多的.NET版本的语言。所有这些语言都可以访问.NET Framework,它们还可以彼此交互。C#开发人员可以使用Visual Basic程序员编写的代码,反之亦然。   所有这些提供了意想不到的多样性,这也是.NET Framework具有诱人前景的部分原因。.NET Framework的内容   .NET Framework主要包含一个非常大的代码库,可以在客户语言(如C#)中通过面向对象编程技术(OOP)来使用这些代码。这个库分为不同的模块,这样就可以根据希望得到的结果来选择使用其中的各个部分。例如,一个模块包含Windows应用程序的构件,另一个模块包含联网的代码块,还有一个模块包含Web开发的代码块。一些模块还分为更具体的子模块,例如在Web开发模块中,有用于建立Web服务的子模块。   其目的是,不同的操作系统可以根据自己的特性,支持其中的部分或全部模块。例如,PDA支持所有的核心.NET功能,但不需要某些更深奥的模块。   部分.NET Framework库定义了一些基本类型。类型是数据的一种表达方式,指定其中最基础的部分(例如32位带符号的整数),以便使用.NET Framework在各种语言之间进行交互操作。这称为通用类型系统(Common Type System,CTS)。   除了支持这个库以外,.NET Framework还包含.NET公共语言运行库(Common Language Runtime,CLR),它负责管理用.NET库开发的所有应用程序的执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值