.NET 开发基础/简介
.NET 开发基础 | |
---|---|
本学习指南**不**旨在替代其他为准备通过 70-536 考试而提供的资源
- 我们提供指向 MSDN 库的链接,但我们并不试图取代它。通过考试的人员经常指出,培训套件没有涵盖考试的各个方面,并且查阅 MSDN 文档是一个很大的优势。
- 我们在适用情况下提供指向维基百科和其他维基媒体项目的链接。这不是一系列理论或百科全书文章,而是一份关于如何在 .NET 框架中实现这些概念以及如何使用它们的指南。
- 我们不提供测试软件
- 我们不假装本模块可以替代微软推荐的培训套件或任何其他推荐材料。
但是,即使在本文档极其不完整的状态下,我们**提供的**内容包括
- 微软规定的考试目标的详尽列表
- 所有考试目标到相应 MSDN 库文章的链接。
- 越来越多的主题的“类似教科书”的解释,以及相关外部资源的链接。
- 最重要的是,一个可以在考试前记录重要笔记和代码示例以供复习,以及在考试后作为专业工作参考的地方。在共享和受控的环境中,没有哪个培训套件或库能做到这一点。
像这样一本书最困难的部分是保持平衡,既要包含足够的内容来涵盖和解释考试的每个目标,又要避免内容过多,因为阅读和学习时间应控制在可管理的范围内。此外,没有理由在此处涵盖与考试目标无关的内容。
最后,作为维基媒体家族(维基百科等)的一部分,Wikibooks 项目对版权和整体质量有非常高的道德标准。如果您发现任何方面有任何“错误”,请随时更正。
本模块围绕微软为 70-536 考试设定的目标构建。第 3 章到第 9 章分别代表考试的 7 个主要目标类别。
坚持考试“官方”目标背后的理念是,我们假设认证提供商(微软)在某种程度上对产品(.NET)有所了解,并且能够说明需要了解哪些重要内容。
对于每一章
- 第一部分涵盖本章中讨论的主要概念(主题)。此“主题”部分使我们能够在某种程度上将“是什么”与“如何做”分开。请注意,考试重点关注库和工具的使用,仅了解概念对于备考来说是远远不够的。
- 第二部分详细介绍该目标类别的第二、第三和第四级考试目标(操作方法、详细用法以及对 MSDN 库的参考)。
最终,我们希望有
- 每一章的“复习题”部分,我们可以在其中讨论考试中可能出现的题型。
- 一个“高级”部分,我们可以在其中放置更高级的材料,并将基本部分的文本流程保持在与考试所需的知识水平相对应的水平。
截至 2007 年 12 月 7 日
- 24 个主题在单独的页面上进行了详细说明(主题标题是链接)。大多数主题最终将被整合到主页面中,以更好地组织文本流程。
- 所有主题都直接链接到 Microsoft 软件开发人员网络 (MSDN) 库,大约 480 个直接来自主页面(标题后面的“MSDN”是链接),其他主题则来自各自的子页面。
- 我们刚刚开始将“主题”部分链接到维基百科文章,让您了解这些概念在微软世界之外是如何定义和处理的。
有些部分相对高级,其他部分则等待您的贡献。并非所有高级部分都位于模块的开头。
在包含考试 70-536“Microsoft .NET Framework 2.0 应用程序开发基础”的认证路径中,它代表了认证流程的第一步。因此,自然地,本第一个学习指南将从对整个框架的简短讨论开始。
在 MSDN .NET 主页 上的定义是:“.NET Framework 是微软用于在 Windows 客户端、服务器以及移动或嵌入式设备上构建应用程序的托管代码编程模型。开发人员使用 .NET 构建各种类型的应用程序:Web 应用程序、服务器应用程序、智能客户端应用程序、控制台应用程序、数据库应用程序等等”。
维基百科的定义是:“Microsoft .NET Framework 是包含在 Microsoft Windows 操作系统中的一个软件组件。它为常见的软件开发需求提供大量预编码的解决方案,并管理为框架专门编写的程序的执行。.NET Framework 旨在用于为 Windows 平台创建的大多数新应用程序”。
微软定义的问题在于它提到了“托管代码编程模型”,这仍然是微软的术语。它最好的定义是:“托管代码是指其执行由 .NET Framework 公共语言运行时管理的代码”(参见 Brad Adams 在 MSDN 上的博客)。
维基百科的定义指出了从开发人员角度来看的两个更重要的方面
- 存在一组**庞大**的类库,可以完成所有常见的编程任务。除了这些类库的庞大规模外,它们还在快速发展。
- 执行环境特定于框架这一事实。“虚拟机”一词常用于描述此类环境。
这两个主要特征与 Java 环境的特征相似,Java 环境是 .NET 框架的主要竞争对手。本模块试图帮助您学习 .NET 框架。它不会涉及 .NET 与 Java 的比较和讨论。
右侧的图片取自维基百科关于 .NET 框架的文章(见上文)。
它描述了用 .NET 兼容语言编写的程序从源代码到执行的过程。与更传统的编程语言(例如 C++)相比,重要的区别在于程序编译了两次。第一次编译是从原始语言到“通用中间语言”(CIL)。这实际上是进入程序集的内容。
第二次编译是从 CIL 到机器码。此编译通常由“即时”(JIT)编译器自动执行。也可以使用 Native Image Generator (ngen) 实用程序提前创建机器码。
此架构对本书的主题有许多直接影响。其中包括
- 第二次编译的“源代码”(CIL 代码)始终在运行时可供虚拟机使用。这意味着此代码可以在运行时轻松地进行分析,这与传统的编译环境相反。此特性是平台反射功能的基础。我们不仅可以分析“中间源代码”,还可以实际在运行时创建(发出)其中的一些代码,然后进行“即时”编译和执行。
- 执行是在 CLR 的上下文中完成的(这就是“托管”代码的概念)。换句话说,我们可以说运行时始终“知道”它发送什么内容进行执行,这与代码直接由操作系统执行的传统环境相反。这意味着您可以告诉运行时执行或不执行此类或那种类型的代码。这是代码访问安全性的基础。
- 大多数 .NET 语言(C#、VB 等)的功能都与中间语言的功能直接相关。换句话说,大多数情况下,第一次编译非常简单。但是,某些结构在 CIL 中没有直接等效项(例如,C# 中的属性映射到 CIL 中的类方法)。
我们可以继续讨论很长时间。我们在这里想要说明的是,即使平台本身没有直接被列为考试目标,开发人员也可以从对其进行详细了解中获益匪浅。
如果您想在 Microsoft 文档中阅读有关框架的信息,可以查看 MSDN。
最后我们要指出的是,公共语言运行时 (CLR) 可以运行在不同的上下文中
- ASP.NET 用于 Web 应用程序,它直接链接到 Internet Information Server (IIS)。
- Internet Explorer 用于客户端 Web 控件
- 在独立主机中用于控制台、服务和 Windows 应用程序。
默认情况下,本书中的示例将使用独立的可执行文件。这仅仅是因为对于非常简单的程序,它们更容易部署。这并不意味着 Windows 应用程序优于 Web 应用程序。
右侧的图片也来自维基百科,它以简化但清晰的方式展示了框架的功能组件。
本书(以及相关的考试)涉及“基类库”组件以及程序与“公共语言运行时”组件的基本关系。
本书不涵盖 ASP.NET、ADO.NET、WF 或任何其他更专业的组件。
我们可以说,我们广泛涵盖了基础知识,但对框架本身的介绍较为浅显。
与公共语言运行时的关系包括以下内容:
- 部署
- 安全
- 配置
- 反射
- 服务
- 与 WMI 的关系
- 互操作性
- 等等。
基类库包括:
- 类型
- 集合
- 泛型
- 文本处理
- 基本绘图
- 基本全球化
- 序列化
- 基本输入/输出
- 多线程
- 等等。
总而言之,这些都是比较“枯燥”的主题。这种从广泛涵盖基础知识开始的想法对于初学者来说肯定不是最有趣的学习模式。因此,我们建议真正的初学者从更合适的资料开始学习。
关于框架“栈”的最后一点说明是,新版本倾向于添加新的组件而不是“重做”现有的组件。这意味着大多数“2.0”的基础知识在“3.5”中仍然有效。然而,一些“基本”功能在新版本中得到了增强或更改。我们将尽可能在侧边栏中跟踪这些变化。
为了简单起见(可能过于简单了),我们可以说编程范式是一种编程“风格”,一种对问题进行建模并将解决方案“翻译”成代码的特定方式。
从开发人员的角度来看,.NET 框架(及其类库)是一个通用的面向对象平台,它不断扩展以支持其他编程范式(使用泛型进行泛型编程,使用特性进行面向方面编程,使用 WF 进行响应式编程,使用 C# 3.0 中的 Lambda 表达式进行函数式编程,等等)。这种“扩展过程”与 Java 的类似。.NET 和 Java 平台是目前唯一两个支持如此广泛的多范式扩展过程的平台。
讨论每种范式实现的范围和“理论合理性”显然超出了本书的范围。
我们在这里要说明的是,在同一个平台上浏览所有这些编程风格可能会让人感到困惑。维护代码也变得越来越困难,因为两位最初的程序员可能使用截然不同的“风格”或结构来解决同一个问题。
因此,我们将尽可能将不同的 .NET 概念与其相应的“风格”联系起来,以便为读者提供一些背景信息。
根据 MSDN 的说法,程序集是:“.NET Framework 应用程序的构建块;它们构成了部署、版本控制、重用、激活范围和安全权限的基本单元”。
.NET Framework 现在是 Microsoft 在 Windows 平台上开发应用程序的首选方式。在这方面,它取代了组件对象模型 (COM)。这一点很重要,因为尽管存在一些部署和管理问题(还记得 DLL 地狱吗?),但 COM 在基于组件的计算(重用整个可执行组件,而不仅仅是程序代码)的发展中发挥了重要作用。人们投入了大量精力将 COM 的基于组件的概念转移到 .NET 框架中,本书的很大一部分内容都涉及这些方面(安全、安装、版本控制等)。
程序集是 COM 组件的继任者。