C#培训资料第十章.ppt_第1页
C#培训资料第十章.ppt_第2页
C#培训资料第十章.ppt_第3页
C#培训资料第十章.ppt_第4页
C#培训资料第十章.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章 命名空间和程序集,本章内容,引用其他程序集 命名空间 Using指令 程序集的结构 程序集标识符 强命名程序集 程序集的私有方式部署 共享程序集和GAC 配置文件 延迟签名,10.1 引用其他程序集,编译器接收源代码文件并生成名称为程序集的输出文件。在许多项目中,你会想使用来自其他程序集的类或类型。这些其他的程序集可能来自BCL,或来自一个第三方卖主,或你自己创建了它们。这些程序集称为类库,而且它们的程序集文件的名称通常以.dll扩展名结尾而不是.exe扩展名。,在Visual Studio中,可以用下面的方法把引用添加到项目:,选择Solution Explorer并在该项目名下找到References目录。 右键点击References目录并选择Add Reference。 对于我们的程序,选择Browse标签,浏览到包含SquareWidget类 定义的DLL文件,并选择它。 点击OK按钮,引用就被加入到项目了。,mscorlib库,有一个类库,在前面的每一个示例中都几乎使用它。它就是包含Console类的那个库。Console类被定义在名称为mscorlib的程序集中,在名称为mscorlib.dll的文件里。然而,你不会看到这个程序集被列在References目录中。,10.2 命名空间,命名空间把一组类型分组在一起并给它们一个名称,称为命名空间。下面展示了声明一个命名空间的语法。声明在大括号中间的所有类和其他类型的名称都是命名空间的成员。 namespace SimpleNamespace TypeDeclarations ,注意关于命名空间名称的两个有趣的事情: 命名空间可以包含前缀。 公司名称在命名空间名称的开始。,10.2.1 命名空间名称,关于命名空间名称的一些要点如下: 命名空间名称可以是任何有效标识符。 命名空间名称可以包含句点符号,用于把类型组织成层次。 下面是建议的命名空间命名指南: 使用公司名开始命名空间名称。 在公司名之后跟着技术名称。 不要把命名空间命名为与类或类型相同的名称。 例如: namespace AcmeWidgets.SuperWidget.SPDComponent class APDBase ,10.2.2 命名空间的补充,关于命名空间,有其他几个要点应该知道: 在命名空间内,每个类型名必须有别于所有其他类型。 命名空间内的类型称为命名空间的成员。 一个源文件可以包含任意数目的命名空间声明,可以顺序也可以嵌套。,10.2.3 命名空间跨文件伸展,命名空间不是封闭的。这意味着可以在该源文件的后面或另一个源文件中再次声明它,以对它增加更多的类型声明,10.2.4 嵌套命名空间,一个命名空间可以是另一个命名空间的成员。有两种方法声明一个嵌套的命名空间: 原文嵌套:可以把命名空间的声明放在一个封装的命名空间声明体内部,从而创建一个嵌套的命名空间。 分离的声明:也可以为嵌套命名空间创建分离的声明,但必须在声明中使用它的完全限定名称。,10.3 using指令,有两个编译指令,可以使你避免不得不使用完全限定名:using命名空间指令和using别名指令: 它们必须放在源文件的顶端,在任何类型声明之前。 它们应用于当前源文件中的所有命名空间。,10.3.1 using命名空间指令,using命名空间指令通知编译器你将要使用来自某个指定命名空间的类型。然而你可以继续,并使用简单类名而不必全路径修饰它们。 using命名空间指令由关键字using跟着一个命名空间标识符组成: using System;,10.3.2 using别名指令,Using别名指令允许起一个别名给: 命名空间 命名空间内的一个类型 例如,下面的代码展示了两个using别名指令的使用: using Syst = System; using SC = System.Console;,10.4 程序集的结构,程序集不包含本地机器代码,而是公共中间语言代码。它还包含实时编译器(JIT)在运行时转换CIL到本机代码所需的一切,包括对它所引用的其他程序集的引用。程序集的扩展名通常为.exe或.dll。 大部分程序集由一个单独的文件构成,它的四个主要部分: 程序集的清单:程序集名称标识符、组成程序集的文件列表、一个指示程序集中内容在哪里的地图、关于引用的其他程序集的信息。 类型元数据部分包含该程序集中定义的所有类型的信息。 CIL部分包含程序集的所有中间代码。 资源部分是可选的,但可以包含图形和语言资源。 说明:尽管大部分程序集由单文件组成,但有些也有多个文件。,10.5 程序集标识符,在.NET框架中,程序集的文件名不像在其他操作系统和环境中那么重要,更重要的是程序集的标识符(identity)。程序集的标识符有四个组成部分,它们一起唯一标识了改程序集: 简单名:这只是不带文件扩展名的文件名。 版本号:它由四个句点分开的整数字符组成。 文化信息:它是一个字符串,由25个字符组成,代表一种语言,或代表一种语言和一个国家或地区。 公钥:这个128字节字符串应该是生产该程序集的公司唯一的。,10.6 强命名程序集,强命名(strongly named)程序集有一个唯一的数字签名依附于它。强命名程序集比没有强名称的程序集更加安全,这是由于以下原因: 强名称唯一标识了程序集。 没有CLR安全组件来捕获更改,带枪名称的程序集的内容不能被改变。 弱命名程序集是没有被强命名的程序集。由于弱命名程序集没有数字签名,它天生是不安全的。,创建强命名程序集,要使用Visual Studio 2008强命名一个程序集,必须有一份公钥/私钥对文件的拷贝。如果没有密钥文件,可以让Visual Studio产生一个。可以实行以下步骤: (1)打开工程的属性。 (2)选择签名页。 (3)选择为程序集复选框签名并输入密钥文件的位置,10.7 程序集的私有方式部署,如果应用程序不需要其他程序集(比如DLL),或如果所需的DLL在同一目录下,那么程序应该会就在它所在的地方良好工作。这种方法部署的程序集称为私有程序集,而且这种部署方法称为复制文件(XCopy)部署。 关于私有程序集部署的一些重要事情如下: 私有程序集所在的目录被称为应用程序目录。 私有程序集可以是强命名的也可以是如命名的。 没有必要在注册表中注册组件。 要卸载一个私有程序集,只要从文件系统中删除它即可。,10.8 共享程序集和GAC,私有程序集是非常有用的,但有时你会想把一个DLL放在一个中心位置,这样一个单独的拷贝就能被系统中其他的程序集共享。.NET有这样的贮藏库,称为全局程序集缓存(GAC)。放进GAC的程序集称为共享程序集。关于GAC的一些重要内容如下: 只有强命名程序集能被添加到GAC。 虽然GAC的早期版本只接受带.dlll扩展名的文件,现在也可以添加带.exe扩展名的程序集了。 GAC的位置在名称Assembly的子目录下 ,在Windows系统目录中。,10.8.1 把程序集安装到GAC,当试图安装一个程序集到GAC时,CLR的安全组件首先必须检验程序集上的数字签名是否有效。如果没有数据签名,或它是无效的,系统将不会把它安装到GAC。 Gacutil.exe命令行工具允许从GAC添加或删除程序集,并列出GAC包含的程序集。它的三个最有用的参数标记如下所示 /i:把一个程序集插入GAC。 /u:从GAC卸载一个程序集。 /l:列出GAC中的程序集。,10.8.2 GAC内的并肩执行,在GAC中可以有许多不同的程序集,它们有相同的文件名。虽然它们有相同的文件名,它们是不同的程序集而且在GAC中完美地共存。这使不同的应用程序在同一时间很容易使用不同版本的同一DLL,因为它们是带不同的标识符的不同程序集。这被称为并肩执行(side-by-side Execution)。,10.9 配置文件,配置文件含有关于应用程序的信息,供CLR在运行时使用。它们可以指示CLR去做这样的事情,比如使用一个不同版本的DLL,或搜索程序引用的DLL时在附加目录中查找。 配置文件由XML代码组成,并不包含C#代码。它们的一种用途是更新一个应用程序集以使用新版本的DLL。,10.10 延迟签名,公司小心地保护它们官方的公钥/私钥对是十分重要的,否则,如果不靠的人得到了它,就可以发布伪装成该公司的代码。 有一种修改了的赋值强命名的形式,称为延迟签名(delayed signing)或部分签名(partial signing),它克服了这些问题,而且没有释放对私钥的访问。 要创建一个延迟签名的程序集,必须做两件事情: 第一,创建一个密钥文件的拷贝,它只有公钥而不是公钥/私钥对。 下一步,为程序集范围内的源代码添加一个名称为DelaySignAttribute的附加特性,并把它的值设为true。,命名空间的优点 程序集的结构 类型元数据的功能(智能感知、对象浏览器、 调试等都用到元数据) CIL的作用(语言、平台无关性),什么是程序集(Assembly) 是一个以公共语言运行库为宿主的、版本化的、自我描述的二进制文件。 不同以往的win32(.exe和.dll

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论