1、 毕业设计(论文)外文文献翻译 1 .NET Framework 介绍 Alex Kriegel 1.NET Framework 是 Microsoft 为开发应用程序而创建的一个富有革命性的新平台。这句话最有趣的地方是它的含糊不清,但这是有原因的。首先,注意这句话没有说“在 Windows 操作系统上开发应用程序”。尽管 .NET Framework 的 Microsoft版本运行在 Windows 操作系统上,但以后将推出运行在其他操作系统上的版本,例如 Mono,它是 .NET Framework 的开发源代码版本 (包含一个 C#编译器 ),该版本可以运行在几个操作系 统上,包括各种
2、Linux 版本和 Mac OS.Microsoft .NET Compact Framework(基本上是完整 .NET Framework 的一个子集 )。使用 .NET Framework 的一个主要原因是它可以作为集成各种操作系统的方式。另外,上面给出的 .NET Framework 定义并没有限制应用程序的类型。这是因为本来就没有限制。 .NET Framework 可以创建 Windows 应用程序、 Web 应用程序、 Web 服务和其他各种类型的应用程序 .NET Framework 的设计方式保证它可以用于各 种语言,包括 C#语言 ,C+、 Visual Basic、 JS
3、cript,甚至一些旧的语言,如 COBOL。为此,还推出了这些语言的 .NET 版本,目前还在不断推出更多的 .NET 版本的语言。所有这些语言都可以访问 .NET Framework,它们还可以彼此交互。 C#开发人员可以使用Visual Basic 程序员编写的代码,反之亦然。所有这些提供了意想不到的多样 这也是 .NET Framework 具有诱人前景的部分原因。 2.NET Framework 主要包含一个非常大的代码库,可以在客户语言 (如 C#)中通过面向对 象编程技术 (OOP)来使用这些代码。这个库分为不同的模块,这样就可以根据希望得到的结果来选择使用其中的各个部分。例如,
4、一个模块包含 Windows应用程序的构件,另一个模块包含联网的代码块,还有一个模块包含 Web 开发的代码块。一些模块还分为更具体的子模块,例如在 Web 开发模块中,有用于建立Web 服务的子模块 .其目的是,不同的操作系统可以根据 自己的特性,支持其中的部分或全部模块。例如, PDA 支持所有的核心 .NET 功能,但不需要 某些更深奥的模块。 部分 .NET Framework 库定义了一些基本类型。 类型是数据的一种表达方式,指定其中最基础的部分 (例如 32 位带符号的整数 ),以便使用 .NET Framework 在各种语言之间进行交互操作。这称为通用类型系统 (Common
5、Type System, CTS).除了支持这个库以外, .NET Framework 还包含 .NET 公共语言运行库 毕业设计(论文)外文文献翻译 2 (Common Language Runtime, CLR),它负责管理用 .NET 库开发的所有应用程序的执行。 3.如何用 .NET Framework 编写应用程序 .使用 .NET Framework 编写应用程序,就是使 用 .NET 代码库编写代码 (使用支持 Framework 的任何一种语言 ).VS 是一种强大的集成开发环境,支持 C#(以及托管和非托管 C+、 Visual Basic 和其他一些语言 )。这个环境的优点
6、是便于把 .NET 功能集成到代码中。我们创建的代码完全是C#代码,但使用 .NET Framework,并在需要时利用 VS 中的其他工具。为了执行C#代码,必须把它们转换为目标操作系统能够理解的语言,即本机代码,这种转换称为编译代码,由编译器执行。但在 .NET Framework 下,这个过程分为两个阶段。 4. MSIL 和 JIT 在编译使 用 .NET Framework 库的代码时,不是立即创建操作系统特定的本机代码,而是把代码编译为 Microsoft 中间语言 (Microsoft Intermediate Language, MSIL)代码,这些代码不专用于任何一种操作系统
7、,也不专用于 C#。其他 .NET 语言,如 Visual Basic .NET 也可以在第一阶段编译为这种语言,当使用 VS开发 C#应用程序时,编译过程就由 VS 完成。显然,要执行应用程序,必须完成更多的工作,这是 Just-In-Time(JIT)编译器的任务,它把 MSIL 编译为专用于 OS 和目标机器结构的本机代码。这样 OS 才能执行应用程序。这里编译器的名称Just-In-Time 反映了 MSIL 仅在需要时才编译的事实。过去,常常需要把代码编译为几个应用程序,每个应用程序都用于特定的操作系统和 CPU 结构。这通常是一种优化形式 (例如,为了让代码在 AMD 芯片上运行得
8、更快 ),但有时是非常重要的 (例如对于工作在 Win9x 和 WinNT/2000 环境下的应用程序 )。现在就不必要了,因为顾名思义, JIT 编译器使用 MSIL 代码,而 MSIL 代码是独立于机器、操作系统和CPU 的。目前有几种 JIT 编译器,每种编译 器都用于不同的结构,我们总能找到一个合适的编译器创建所需的本机代码。 这样,用户需要做的工作就比较少了。实际上,可以不考虑与系统相关的细节,把注意力放在代码的功能上就够了。 5. 程序集在编译应用程序时,所创建的 MSIL 代码存储在一个程序集中,程序集包括可执行的应用程序文件 (这些文件可以直接在 Windows 上运行,不需要
9、其他程序,其扩展名是 .exe)和其他应用程序使用的库 (其扩展名是 .dll)。除了包含 MSIL外,程序集还包含元信息 (即程序集中包含的数据的信息,也称为元数据 )和可选的资源 (MSIL 使用的其他 数据,例如声音文件和图片 )。元信息允许程序集是完全自 毕业设计(论文)外文文献翻译 3 我描述的。不需要其他信息就可以使用程序集,也就是说,我们不会遇到下述情形:不能把需要的数据添加到系统注册表中,而这种情形在使用其他平台进行开发时常常出现。因此,部署应用程序就非常简单了,只需把文件复制到远程计算机上的目录下即可。因为不需要目标系统上的其他信息,所以只需从该目录中运行可执行文件即可 (假
10、定安装了 .NET CLR)。当然,不必把运行应用程序所需要的所有信息都安装到一个地方。可以编写一些代码,执行多个应用程序所要求的任务。此时,通常把这些可重用的代 码放在所有应用程序都可以访问的地方。在 .NET Framework 中,这个地方是全局程序集高速缓存 (Global Assembly Cache, GAC),把代码放在这个高速缓存中是很简单的,只需把包含代码的程序集放在包含该高速缓存的目录下即可。 6. 托管代码在把代码编译为 MSIL,再用 JIT 编译器把它编译为本机代码后,CLR 的任务还没有全部完成。用 .NET Framework 编写的代码在执行 (这个阶段通常称为
11、运行时 (runtime)时是托管的。即 CLR 管理着应用程序,其方式是管理内存、处理安全性,以及允 许进行跨语言调试等。相反,不在 CLR 控制之下运行的应用程序是非托管的,某些语言如 C+可以用于编写这类应用程序,例如,访问操作系统的低级功能。但是,在 C#中,只能编写在托管环境下运行的代码。我们将使用CLR 的托管功能,让 .NET 自己与操作系统进行交互。 7. 垃圾回收 托管代码最重要的一个功能是垃圾回收 (garbage collection)。这种 .NET 方法可确保应用程序不再使用某些内存时,这些内存就会被完全释放。在 .NET 推出以前,这项工作主要由程序员负责,代码中的
12、几个简单错误会把大块内存分配到错误的地 方,使这些内存神秘失踪。这通常意味着计算机的速度逐渐减慢,最终导致系统崩溃。 .NET 垃圾回收会频繁检查计算机内存,从中删除不再需要的内容。它没有设置时间帧,可能一秒钟内会进行上千次的检查,也可能几秒钟检查一次,或者随时进行检查,但可以肯定进行了检查。 这里要给程序员一些提示。因为这项工作在不可预知的时间进行,所以在设计应用程序时,必须记得要进行这样的检查。需要许多内存才能运行的代码应自己执行这样的检查,而不是坐等垃圾回收,但这不像听起来那样难。 8. 把它们组合在一起 在继续学习之前,先总结一下上述创建 .NET 应用程序所需要的步骤: (1)使用某种 .NET 兼容语言 (如 C#)编写应用程序代码,如图 1-1 所示。 (2)把代码编译为 MSIL,存储在程序集中 . (3) 在执行代码时 (如果这是一个可执行