C#温故而知新—闲话.Net
在Java搞得如火如荼时,微软为了巩固自己的霸主地位,自然要来分一杯羹,于是.NET应运而生。
.Net的战略。
NET是一种面向网络、支持各种用户终端的开发平台环境。.NET的特点:
- 软件即服务(SaaS)
微软的.NET战略意味着:微软公司以及在微软平台上的开发者将会制造服务,而不是制造软件。在未来几年之内,微软将陆续发布有关.Net的平台和工具,用于在因特网上开发web服务。那时,工作在.Net上的用户、开发人员和ET工作人员都不再购买软件、安装软件和维护软件。取而代之的是,他们将定制服务,软件会自动安装,所有的维护和升级也会通过互联网进行。
- 基于XML的共同语言
XML是一种标记语言。作为元语言,它可以定义不同种类应用的数据交换语言。在.NET体系结构中,XML作为一种应用间无缝接合的手段,用于多种应用之间的数据采集与合并.用于不同应用之间的互操作和协同工作。
- 融合多种设备和平台
随着Internet逐渐成为一个信息和数据的中心,各种设备和服务已经或正在接入和融入Internet,成为其中的一部分。.Net谋求与各种Internet接入设备和平台的一体化,主要关注在无线设备和家庭网络设备及相关软件、平台方面。
- 新一代的人机界面
新一代人机界面主要体现在"智能与互动"两个方面。.Net包括通过自然语音、视觉、手写等多种模式的输入和表现方法;基于XML的可编辑复合信息架构——通用画布;个性化的信息代理服务:使机器能够更好地进行自动处理的智能标记等技术。
CLI
微软给.NET绘制了一幅美好的蓝图,提出了一套公共语言架构(CLI)。先来看看CLI到底为何物。
CLI包含了CTS (Common type system, 通用类型系统), CIL (Common Intermediate Language, 公共中间语言)。图中的CLS (Common Language Specification, 公共语言规范)是 CTS的子集, 所有与CLI兼容的编程语言都必须遵守它
微软是这么解释CLS的:
CLS 规则定义了通用类型系统的子集,即所有适用于公共类型系统的规则都适用于 CLS,除非 CLS 中定义了更严格的规则。CLS 通过定义一组开发人员可以确信在多种语言中都可用的功能来增强和确保语言互用性。CLS 还建立了 CLS 遵从性要求,这帮助您确定您的托管代码是否符合 CLS 以及一个给定的工具对托管代码(该代码是使用 CLS 功能的)开发的支持程度。
CLI公共语言架构的核心是什么呢?这里包含了微软的野心,MS想通过这个架构实现向上无关性(跟具体语言无关)和向下无关性(与具体平台无关)。
只要遵从CLI,可以使用任何语言来开发程序(例如c#,c++),当然,这些语言需要符合CLS。程序开发好后编译器会将其编译为CIL(通用中间语言)。这个中间语言就牛X了,不管是什么语言开发的程序,编译后的CIL都是一样的,所以这也为不同语言的协作提供了方便。比如c++用来做数学运算比较方便,效率较高,大可以使用c++来编写数学计算的类库,然后在c#里调用这个类库。这便是向上无关性。
再来看看ms怎么实现向下无关性的。上面说了,程序编译的结果是CIL,那么在运行时,更具不同的平台,编译器只需要将CIL装换为相应的本地代码就能运行了。
CLR
微软是靠Windows起家的,自然而然的,微软在Windows平台实现了CLI,结果就是我们今天的.NetFrameWork,包含.NET类库与CLR。
让我们来揭开CLR的面纱。
CLR (Common Language Runtime, 公共语言运行库) : MS用于Windows 的CLI实现
.NetFrameWork提供了一个运行时环境,叫做公共语言运行时(CLR),它管理着代码的执行,并使得开发过程变得更加简单。可以将它想象为一个虚拟机,它为各种.NET应用提供了一个高性能的、抽象于底层操作系统和硬件环境的运行时环境。
CLR的主要功能 :
- 管理代码的执行
- 提供通用类型系统
- 提供系统服务
NetFrameWork程序的运行过程
编写代码à编译成中间语言MSIL(Microsoft Intermediate Language,微软中间语言)à执行时被即时(JIT)编译器编译成为本地代码à运行在CLR (Common Language Runtime, 公共语言运行库)