zoukankan      html  css  js  c++  java
  • 【CLR】程序集和命名空间

    将模块合并成程序集

           控制台应用Program并非只是含有元数据的PE文件,他还是程序集(assembly)。程序集是一个或多个类型定义文件及资源文件的集合。在程序及的所有文件中,有一个文件容纳了清单(manifest)。清单也是一个元数据表集合,表中主要包含作为程序集组成部分的那些文件的名称。此外,还描述了程序集的版本、语言文化、发布者、公共导出的类型以及构成程序集的所有文件。

           CLR操作的是程序集。换而言之,CLR总是首先加载包含清单元数据表的文件,再根据清单来获取程序集中的其他文件的名称。下面列出了程序集的重要特点。

    1 程序集定义了可重用的类型

    2 程序集用一个版本号标记

    3 程序集可以管理安全信息

    除了包含清单元数据表的文件,程序集其他单独的文件并不具备上述特点。

           类型为了顺利地进行打包、版本控制、安全保护以及使用,必须放在座位程序集一部分的模块中。程序集大多数时候只有一个文件,就像前面的Program.exe那样。然后,程序集还可以由多个文件构成:一些事含有元数据的pe文件,另一些是.gif或.jpg这样的资源文件。为便于理解,可将程序集视为一个逻辑EXE或DLL。

           Microsoft为什么引入程序集的概念?这是因为使用程序集,可重用类型的逻辑表示物理表示就可以分开。例如,程序集可能包含多个类型。可以将常用类型放到一个文件中,不常用类型放到另一个文件中。如果程序集要从internet下载并部署,那么对于含有不常用类型的文件,加入客户端不使用那些类型,该文件就永远不会下载到客户端。

           使用多文件程序集的额外三个理由

    1 不同的类型用不同的文件,使文件能以“增量”方式下载(就像前面在internet下载的例子描述的那样)。另外,将类型划分到不同的文件中,可以对购买和安装的应用程序进行部分或分批打包/部署。

    2 可在程序集中添加资源或数据文件。例如,假定一个类型的作用是计算保险信息,需要访问精算表才能完成计算。在这种情况下,不必在自己的源代码中签入精算表。相反,可以使用有一个工具,使数据文件称为程序集的一部分。数据文件可为任意格式——只要应用程序知道如何解析。

    3 程序集包含的各个类型可以用不同的编码程序语言来实现。然后 可以用工具将所有模块合并成单个程序集。

           总之,程序集是进行重用、版本控制和应用安全性设置的基本单元。它允许将类型和资源文件划分到单独的文件中。这样一来,无论你自己还是用户,都可以决定打包和部署那些文件,一旦CLR加载还有清单的文件,就可确定在程序集的其他文件中。

    命名空间和程序集

           命名空间对相关的类型进行逻辑分组,开发人员可通过命名空间方便地定位类型。例如,system.test命名空间定义了执行字符串处理的类型,而System.io命名空间定义了执行i/o操作的类型。

           对于编译器,命名空间的作用就是为类型名称附加以句点分隔的符号,使名称变得更长,更可能具有唯一性。

           命名空间更多的是对编译器和我们这些写代码的人而言的概念,方便我们的编写和编译。clr对“命名空间”一无所知。访问类型时,clr需要知道类型的完整名称(可能是相当长的、包含句点符号的名称)以及该类型的定义具体在哪个程序集中,这样“运行时”才能加载正确程序集找到目标类型,并对其进行操作。

           using指令简化了类型名称,编译器会对当前代码中未识别的类型自动去匹配using 中引用的命名空间,直到找到对应类型。当然也会有潜在问题:可能两个或更多类型在不同命名空间中同名。为了消除歧义,必须显式告诉编译器需要需要生死用哪个类型。

           c# using指令的另一种形式允许为类型或命名空间创建别名。如果只想使用命名空间中的少量代码,不想它的所有类型都跑出来“污染”全局命名空间,别名就显得十分方便。

    using a=wwwwww.asdasd;

    注意:命名空间和程序集不一定相关。特别是,同一个命名空间中的类型可能在不同程序集中实现。同一个程序集也可能包含不同命名空间中的类型,例如system.int32和system.text.StringBuilder类型都在MSCorLib.dll程序集中。

  • 相关阅读:
    hdu5360 Hiking(水题)
    hdu5348 MZL's endless loop(欧拉回路)
    hdu5351 MZL's Border(规律题,java)
    hdu5347 MZL's chemistry(打表)
    hdu5344 MZL's xor(水题)
    hdu5338 ZZX and Permutations(贪心、线段树)
    hdu 5325 Crazy Bobo (树形dp)
    hdu5323 Solve this interesting problem(爆搜)
    hdu5322 Hope(dp)
    Lightoj1009 Back to Underworld(带权并查集)
  • 原文地址:https://www.cnblogs.com/qixinbo/p/12772754.html
Copyright © 2011-2022 走看看