已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第14章命名空间 预处理器和程序集 为了方便开发者开发复杂的大型程序 C 提供各种机制来提高开发效率和编译效率 常用的机制包括命名空间 预处理和程序集 其中 命名空间解决了资源命名问题 预处理器可以有效提升编译效率 程序集则是C 编程的基本组成内容 本章将详细介绍这3个C 功能 命名空间 预处理器和程序集 14 1命名空间 命名空间定义了一个声明区域 它提供了将一组名称与另一组名称进行区分的方法 一个命名空间中声明的名称不会与另一个命名空间中声明的相同名称冲突 所有的C 程序都会以某种方式使用命名空间 在前面的章节中 程序只简单地使用了全局命名空间 但是在实际情况中 许多程序都需要创建自己的命名空间或者与其他的命名空间进行交互 本章将详细介绍这些内容 14 1 1命名空间的声明 使用namespace关键字可以声明一个命名空间 其通用形式如下图所示 其中 name是命名空间的名称 命名空间声明定义了一个作用域 定义在命名空间中的所有元素都限制在该命名空间的作用域内 命名空间的成员可以是用户声明的类 结构 委托 枚举和接口 也可以是另一个命名空间 示例14 1 下面代码创建了一个名为Coun的命名空间 它把一个实现简单倒计时计数器功能的CounDow类限制在该命名空间中 第一 由于CounDow类是在Coun命名空间中声明的 因此在创建CounDow对象时 必须使用Coun限定CounDow类 代码如下 Coun CounDowcd1 newCoun CounDow 10 Coun CounDowcd2 newCoun CounDow 15 第二 一旦创建Coun类型的对象 就不需要使用命名空间进一步限定该变量或它的任何成员 因此 可以直接调用cd1 Cont 方法而不用使用命名空间限定 代码如下 i cd1 Cont i cd2 Cont 14 1 2命名空间的作用 命名空间的作用是 在它内部声明的名称不会与在它外部声明的相同名称冲突 示例14 2 以下程序定义了两个命名空间 其中一个命名空间是Coun 另一个是Coun2 它们都包含CounDow类 但是因为这两个类包含在不同的命名空间中 所以不会产生冲突 虽然 Coun命名空间内部的CounDow类与Coun2命名空间中的CounDow类名称相同 但是这两个类在不同的命名空间中是相互独立的 不会产生冲突 注意 这里只能是不同名称命名空间中的相同成员 如果是相同名称命名空间中的相同成员 将不能避免冲突 14 1 3using指令 如果程序需要频繁地引用某个命名空间中的成员 那么每次都指定它的命名空间就会很麻烦 使用using指令可以解决这个问题 必须在每个文件的开头指定using指令 它位于所有其他的声明之前 或者位于命名空间主体的开始位置 此外 using指令也可以用来引入用户自定义的命名空间 using指令有两种形式 第一种形式如下 usingname 其中 name指定要访问的命名空间名称 引入命名空间后 就会引入所有定义在该命名空间中的成员 并且能够不加限定地使用它们 示例14 3 下面的程序重写了前面的计数器示例 介绍如何使用using指令引入自定义的命名空间 14 1 4using指令的另一种形式 using指令的另一种形式可以为类型或命名空间创建别名 代码如下 usingabc name 其中 abc是name所指定的类型或命名空间的别名 一旦创建别名 就可以使用别名代替原始的名称 示例14 4 下面的程序还是重写前面的计数器示例 介绍如何使用using指令的另一种形式引入自定义的命名空间 14 1 5命名空间的合成 一个命名空间可以同时在多个文件中声明 编译时再将各部分内容组合到一起 因此可以把同一个命名空间的定义拆开到多个文件中 也可以分散在多个文件中 示例14 5 下面的程序定义了两个Coun的命名空间 一个包含Aclass类 另一个包含Bclass类 程序在编译的时候 会将这两个Coun命名空间的内容组合到一起 14 1 6嵌套命名空间 一个名称空间可以嵌套在另一个命名空间之中 其格式如下图所示 嵌套命名空间还有另一种形式 格式如下 示例14 6 以下程序B命名空间嵌套在A命名空间中 其中 命名空间的名称之间以句点 隔开 例如 A B Bclassbc newA B Bclass 14 1 7全局命名空间 如果没有给程序声明命名空间 就会使用默认的全局命名空间 大多数实际的代码都需要包含在声明的命名空间中 把代码封装在声明的命名空间中主要是为了避免名称冲突 14 1 8使用命名空间别名限定符 尽管命名空间可以帮助避免名称冲突 但却不能完全消除这种冲突 如果在两个不同的命名空间中声明了相同的成员 而程序又同时引入了这两个命名空间 就会发生名称冲突 在这种情况下 可以使用命名空间别名限定符 显式地指定希望使用的命名空间 限定符的通用形式为 namespace alias identifier其中 namespace alias是命名空间的别名 identifier是该命名空间中成员的名称 示例14 7 以下程序创建了两个命名空间 一个是Acoun 另一个是Bcoun 这两个命名空间都声明一个CounDow类 并且都由using语句引入到程序中 并使用命名空间别名限定符 让程序正常运行 注意 要使用 限定符 必须先为要限定的命名空间定义一个别名 例如 usingABC Acoun 将此别名用于CounDow类 代码如下 ABC CounDowcd1 newABC CounDow 14 2预处理器 C 定义了多个预处理器指令 它可以改变编译器解释程序源文件的方式 C 定义的预处理器指令如下表所示 注意 所有预处理器指令都以 开头 并且 每个预处理器指令必须单独成行 14 2 1 define define指令用于定义一个称为符号的字符序列 if和 elif指令可以判断某个符号是否已经存在 define指令的通用形式为 definesymbol其中 symbol表示要定义的符号名称 注意 这条语句中并没有分号 在 define指令和符号之间可以存在任意多个空格 但是 一旦符号定义开始 就只能通过换行来结束定义 示例14 8 使用 define指令定义ABC符号 代码如下 defineABC注意 在C 中 define指令仅用于定义符号 14 2 2 if和 endif if和 endif指令可以实现代码序列的条件编译 如果一个符号已经定义 则它的值为true 否则就为false 因此 如果使用 define指令定义了一个符号 那么该符号就为true if指令的通用形式如下 ifsymbol expression endif if使用户可以开始条件指令 测试一个或多个符号以查看它们是否计算为true 如果它们的计算结果确实为true 则编译器将计算位于 if与最近的 endif指令之间的所有代码 示例14 9 以下程序介绍 if和 endif指令在程序中的运行情况 程序运行的流程图如下所示 注意 defineABC必须放在最开始 否则编译器会报错 符号表达式可以简单到只包含一个符号名称 也可以在符号表达式中包含 和 运算符 也可以使用圆括号 示例14 10 在 if指令中的符号表达式内可以使用运算符 在没有定义符号时 可以使用 运算符编译代码 14 2 3 else和 elif else指令定义了 if测试失败时执行的代码 其格式与C 语言相似 格式如下图所示 示例14 11 以下程序介绍 else指令的使用 其中 因为每个 if指令只能对应一个 endif指令 所以任何 if指令只可以有一个关联的 else指令 elif指令意味 elseif 它用来为多个要编译的分支构建一个if else if结构 elif指令的后面为一个符号表达式 elif指令的通用形式如下 其中 symbol表示符号表达式 ifsymbol elifsymbol elifsymbol else endif 示例14 12 以下程序介绍 elif指令的使用 程序运行流程如右图所示 14 2 4 undef undef指令可以删除前面定义的符号 也就是说 它可以取消符号定义 undef指令的通用形式为 undefsymbol其中 symbol表示要删除的符号 示例14 13 以下程序介绍 undef指令的使用 其中 undefABC必须放在最开始 否则会出现如下图所示错误 14 2 5 error error指令主要用于调试 它可以强制编译器停止编译 error指令的通用形式为 errorerror message其中 error message表示要显示的错误消息 示例14 14 在遇到 error指令时 会显示错误提示 14 2 6 warning warning指令与 error指令类似 但是它产生的消息不是错误消息而是警告消息 所以编译过程不会停止 warning指令的通用形式为 warningwarning message其中 warning message表示要警告的消息 示例14 15 介绍 warning指令时如何使用的 14 2 7 line line指令可以为它所在的文件设置行号和文件名 编译过程中如果出现了错误或警告 就会用到这些行号和文件名 line使您可以修改编译器的行号以及 可选 错误和警告的文件名输出 line指令的通用形式为 linenumber filename 其中 number是任意的正整数 它用作新行的行号 filename必须包括在 中 其表示任意有效的文件标识符 它用作新的文件名 line指令主要用于调试特殊的应用程序 14 2 8 region和 endregion region和 endregion指令用于定义一个区域 可以在VisualStudio代码编译器的大纲视图中展开或折叠该区域 这两个指令的通用形式如下 regiontext 代码块 endregiontext其中 text是可选的字符串 而且 region块必须以 endregion指令结尾 示例14 16 介绍 region与 endregion指令是如何使用的 注意 region块不能与 if块重叠 但是 可以将 region块嵌套在 if块内 或将 if块嵌套在 region块内 如果 region块与 if块重叠 编译器将会提示错误消息 14 2 9 pragma pragma指令用于给出指示 这些指示必须是编译器支持的指示 换句话说就是 pragma指令不能创建自定义指示 pragma指令的通用形式为 pragmaoption其中 option指的是传递给编译器的指示 编译器支持 pragmawarning和 pragmachecksum两个 pragma指令 1 pragmawarning pragmawarning可启用或禁用某些警告 它的两种形如下 pragmawarningdisablewarning list pragmawarningrestorewarning list其中 warning list表示警告编号的逗号分隔列表 只输入数字 不包括前缀 CS disable选项将禁止一个警告 而restore选项则启用一个警告 如果没有指定warning list 那么所有的警告都会受影响 2 pragmachecksum pragmachecksum用于为ASP NET项目生成校验和 其通用形式为 pragmachecksum filename guid checksumbytes 其中 filename是文件的名称 guid是与filename相关的全局唯一标识符 checksumbytes表示十六进制数的字符串 即校验和的字节 必须是偶数位的十六进制数 奇数位的十六进制数字会导致编译时警告 然后指令被忽略 示例14 17 介绍 pragma指令的作用 14 3程序集 程序集是指一个或多个包含了程序的所有部署和版本信息的文件 它是 net环境的基础 程序集提供支持安全组件交互操作 跨语言操作以及版本化的机制 此外 程序集还定义了作用域 程序集由4个部分组成 第一个部分是程序集清单 清单包含了程序集本身的信息 这些数据包括程序集的名称 版本号 类型映射信息和区域性设置 第二部分为类型元数据 它描述了程序使用的数据类型 类型元数据有助于实现跨语言互操作性 第三部分是以MSIL MicrosoftIntermediateLanguage Microsoft中间语言 格式存储的程序代码 第四部分是程序利用的资源 在使用C 时 程序集是自动生成的 不需要开发人员执行任何额外的操作 这是因为在编译C 应用程序时所创建的exe文件就是一个程序集 它包含了程序的可执行代码以及其他类型的信息 因此 在编译C 应用程序时会自动生成程序集 internal修饰符声明的成员在程序集内的所有文件中均可使用 但是不能在程序集外部使用 换句话说就是 标记为internal的成员可以在程序内部使用 而不可以在程序外部使用 internal修饰符能够应用于类 类的成员 结构以及结构的成员 internal修饰符还可以应用于接口和枚举声明 示例14 18 介绍如何使用internal访问修饰符 被in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人自查自纠整改报告
- 2025年贸易业务自查自纠报告
- 快餐连锁品牌服务标准与流程手册
- 小学英语综合能力竞赛试题集
- 校企合作实践教学实施方案
- 施工单位安全风险防范措施
- 小学数学课堂教学质量分析
- 餐饮连锁食品原料采购管理流程
- 生态环保氧化塘施工技术规范
- 房地产中介服务管理流程
- 未来五年养殖淡水鳙鱼(胖头鱼)企业县域市场拓展与下沉战略分析研究报告
- 2026年宁夏贺兰工业园区管委会工作人员社会化公开招聘备考题库参考答案详解
- 癌痛患者心理支持策略
- 2025年12月份四川成都市第八人民医院编外招聘9人笔试参考题库及答案解析
- 25秋二上语文期末押题卷5套
- 达人分销合同范本
- 检修车间定置管理制度(3篇)
- 乘用车内部凸出物法规培训
- 妇科肿瘤保留生育功能治疗策略
- 建筑工程施工管理论文2025年
- 吸烟有害健康课件教学
评论
0/150
提交评论