第17节 组织应用程序.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
组织应用程序 目 标 学习完本章之后,你应该能够掌握以下概念: 什么动态连接库 什么是命名空间 如何使用命名空间 解决方案、项目、源文件、类、程序集之间的关系 引 言 在传统的Windows 应用程序中,动态链接库Dynamic-Link Library DLL 是一个非常重要的组成部分。在建立应用程序的可执行文件时,不需要将DLL 链接到程序中,而是在程序运行时动态装载DLL 。除了很小的程序以外,实际工作的一个应用程序通常都由若干的编译单元共同组成。出于方便,我们常常将大型的程序分为若干个相互联系的可执行程序和动态链接库。 有经验的程序员一定深有体会,使用现有的各种语言开发工具来编写动态链接库是一件非常困难同时又是非常需要耐心的事情。然而现在你将会发现,用C#来编写动态链接库和写简单的可执行程序几乎没什么两样,只要一些简单的标记编译器将会为我们完成绝大多数的工作。 C# 程序是通过使用命名空间来组织的命名空间,即可以作为应用程序的内部结构体系, 也可以作为应用程序的外部结构体系。在作为外部结构体系时,程序中的一些元素可以被导出到其它的程序。使用指示符导入命名空间有助于使用方便。 基本概念 动态链接库 你是否有过这样的经历,在配置不是很好的机器上运行一些不是很完善的Windows 应用程序,系统速度越来越慢,直至弹出一个警告对话框,系统资源严重不足请关闭部分Windows 应用程序,这往往是静态链接的缘故。使用普通的函数库,在程序链接时将库中的代码拷贝到可执行文件中这叫作静态链接。假设有多个程序同时执行并且都调用了同一个动态链接库,这时内存中就会保留许多重复的代码副本。 使用动态链接库则不一样,只有程序在执行时才将库代码装入内存,对于同一个动态链接库无论有多少个应用程序同时在使用它,内存中都只有一个动态链接库的副本。如果动态链接库不再被任何程序使用,系统就将它调出内存,这就减少了应用程序对内存的要求。 动态链接库是一种程序模块,它不仅可以包含可执行代码,而且通常还包含了各种类型的预定义的数据和资源,扩大了库文件的使用范围。Windows 操作系统使用了许多动态链接库,比如我们使用Visual C++建立MFC 应用程序时,如果在AppWizard向导中选择了使用MFC 作为动态链接库,那么所有这种类型的程序至少都共用了C:\Windows\System 目录下的MFC 动态链接库文件Msvcrt.dll 和Mfc42.dll ,许多设备的驱动程序也是用动态链接库实现的,扩展名一般为.drv。动态链接库技术常常用于开发大型软件系统,一个大型系统如果只通过一个可执行文件来完成那程序就太庞大了,而且可能有许多重复的功能,这时如果将程序分解由一系列主程序和动态链接库组成,这就减少了开发难度和工作量,提高了访问的速度,更有利于对整个系统的管理。 动态链接库的另一个用途是,软件产品国际化开发人员可以将依赖于各国语言的资源分离开来各自放进专门的动态链接库中,各国不同的用户可以在安装和运行时选择适当语言版本的动态链接库,这样主程序不用改变就可以用于全球范围。这是实现软件国际化的一项技术,知道了动态链接库的这些特点,相信读者不难明白为什么动态链接库的应用那么广泛了。 编译单元 我们再首先介绍一下编译单元Compilation units 的概念,顾名思义编译单元是能够被编译器进行编译的最小单位。编译单元定义了源文件的整体结构,一个编译单元的声明格式如下: using-directives attributes namespace-member-declarations 一个C#程序包含了一个或多个编译单元,每一个编译单元包含在一个独立的源文件中,当C#程序被编译时,编译器对程序的所有编译单元进行统一处理,编译单元也可能互相依赖。 编译单元的使用指示符只对本单元的属性和命名空间成员声明产生影响,但不会影响到其它的编译单元。 命名空间和装配 到现在为止,除了依赖于一些系统提供的类,比如一开始我们就提到的System.Console 类,我们介绍的程序主要都是依靠自身来实现的。但更普遍的情况是,现实世界中的应用程序可能包含许多不同的部分。举个例子,一个应用程序系统可能需要依赖于许多不同的组件,一些是内部开发的,另一些是从别的软件开发商处购买的。 使用命名空间和装配使得这种基于组件的系统成为可能,命名空间提供了一个逻辑上的层次结构体系,它即可以作为应用程序的内部结构体系,也可以作为应用程序的外部结构体系。在作为外部结构体系时,程序中的一些元素可以被导出到其它的程序。 装配用于应用程序的打包packaging 和部署deployment ,装配和模块所扮演的角色类似都可以作为类型的物理容器,一个装配可能包含若干个相互独立的模块,可以包含许多类型

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档