masky5310(
网学)贡献
——当我第一次听到 Microsoft .NET 平台时,我就知道它将续写微软不败的神话. (Jeffrey Richter)
引言
这篇文章我很早很早之前就想写了, 本来是想把它作为我开博的第一篇的, 但由于种种原因 直到现在写出来.本文不是用.NET 平台和其余平台(诸如 Java)做比较,不去评论孰优孰 劣.仅仅是作为一个.NET 开发者,介绍一下我眼中的.NET.
1,.NET Framework ,
.NET Framework 包括公共语言运行时 公共语言运行时(Common Language Runtime,CLR)和框架类库 公共语言运行时 框架类库 (Framework Class Library,FCL).
CLR 是.NET Framewor k 的基础, 核心,提供 了包括内 存管理,线 程管理和 远程调用 等核心服 务.
FCL 是一个基
于面向对 象的可重 用类型集 合,用于支 持多种应 用的快速 开发,诸如 ASP.NET Web 应用, Windows Form 应 用,Web Service 应 用, Windows Presentati on Foundatio n(WPF) 应用等.
图 1,.NET Framework(来自:MSDN) .NET Framework 提供一个托管执行环境,简化开发和部署,整合了多种开发语言.CLR 体系的基础,所有的.NET 代码都运行在 CLR 之上,并且与 FCL 紧密结合,并由 之上, 紧密结合, 是.NET 体系的基础,所有的 此创建基于.NET 的 Windows Forms, Web Forms 和 XML Web Services 等应用程 此创建基于 , 序..NET Framework 的下层是操作系统,上层是.
NET 的高级开发语言(C#,F#等).
1.1,CLR ,
CLR(公共语言运行时, Common Language Runtime)和
Java 虚拟机一样也是一个运行时环 境, 它负责资源管理 (内存分配和垃圾收集) 并保证应用和底层操作系统之间必要的分离. ,
为了提高平台的可靠性, 以及为了达到面向事务的电子商务应用所要求的稳定性级别, CLR 还要负责其他一些任务,比如监视程序的运行.按照.NET 的说法,在 CLR 监视之下运行的
程序属于"托管"(managed)代码,而不在 CLR 之下,直接在裸机上运行的应用或者组件属 于"非托管"(unmanaged)的代码.
CLR 将监视形形色色的常见编程错误,许多年来这些错误一直是
软件故障的主要根源,其 中包括: 访问数组元素越界, 访问未分配的内存空间, 由于数据体积过大而导致的内存溢出, 等等.
可以使用 C# 语言编写托管代码,C# 语言提供了下列优点:
完全 面向对象 的设计.
非常 强的类型 安全.
很好 地融合了 Visual Basic 的简 明性和 C++ 的强 大功能.
垃圾 回收.
类似 于 C 和
C++ 的语 法和关键 字.
使用 委托取代 函数指针, 从而增强 了类型安 全和安全 性.函数指 针通过 unsafe C# 关键字 和 C# 编 译器 (Csc.exe) 的 /unsafe 选项可用 于非托管 代码和数 据.
1.2,FCL
,
.NET Framework 类库是一个由 Microsoft .NET Framework 中包含的类,接口和值类型 组成的库.该库提供对
系统功能的访问,是建立 .NET Framework 应用程序,组件和控件 的基础.为便于语言之间进行交互操作,.NET Framework 类型是符合 CLS 的,并因此可 在任何编程语言中使用, 只要这种语言的编译器符合公共语言规范 (CLS). NET Framework 包括的类型执行下列功能:
表示 基础数据 类型和异 常.
封装 数据结构.
执行 I/O.
访问 关于加载 类型的信 息.
调 用 .NET Framewor k 安全检 查.
提供 数据访问,
多客户端 GUI 和服 务器控制 的客户端 GUI.
.NET Framework 提供一组丰富的接口以及抽象类和具体(非抽象)类.可以按原样使用 这些具体的类,或者在多数情况下从这些类派生您自己的类.若要使用接口的功能,既可以 创建实现接口的类,也可以从某个实现接口的 .NET Framework 类中派生类..NET Framework 类库提供下列命名空间.
2,.NET 的程序运行 ,
.NET 上的程序从源码到执行有以下几个步骤(来自 Jeffery Richter 的《.NET 框架程序设 计》):
将源 码编译为 托管模块;
将托 管模块组 合为程序 集;
加载 公共语言
运行时 CLR;
执行 程序集代 码.
这几个过程我总结为下图:
图 2,.NET 上的程序运行 关于托管模块与程序集的关系,我理解如下:
CLR 实际上不和托管模块打交道,