Loading

元数据和自描述组件

[原文链接]

在过去,以一种语言编写的软件组件(.exe 或 .dll)不能方便地使用以另一种语言编写的软件组件。 在这个问题的解决上,COM 向前迈进了一步。 .NET Framework 允许编译器向所有的模块和程序集发出附加的说明性信息,从而使组件互用更加简单。 这种叫做“元数据”的信息有助于组件无缝交互。

元数据是一种二进制信息,用以对存储在公共语言运行时可迁移可执行文件 (PE) 文件或存储在内存中的程序进行描述。 将您的代码编译为 PE 文件时,便会将元数据插入到该文件的一部分中,而将代码转换为 Microsoft 中间语言 (MSIL) 并将其插入到该文件的另一部分中。 在模块或程序集中定义和引用的每个类型和成员都将在元数据中进行说明。 当执行代码时,运行时将元数据加载到内存中,并引用它来发现有关代码的类、成员、继承等信息。

元数据以非特定语言的方式描述在代码中定义的每一类型和成员。 元数据存储以下信息:

  • 程序集的说明。

    • 标识(名称、版本、区域性、公钥)。

    • 导出的类型。

    • 该程序集所依赖的其他程序集。

    • 运行所需的安全权限。

  • 类型的说明。

    • 名称、可见性、基类和实现的接口。

    • 成员(方法、字段、属性、事件、嵌套的类型)。

  • 特性。

    • 修饰类型和成员的其他说明性元素。

对于一种更简单的编程模型来说,元数据是关键,该模型不再需要接口定义语言 (IDL) 文件、头文件或任何外部组件引用方法。 元数据使 .NET Framework 语言能够自动以非特定语言的方式对其自身进行描述,而这是开发人员和用户都无法看见的。 另外,通过使用特性,可以对元数据进行扩展。 元数据具有以下主要优点:

  • 自描述文件。

    公共语言运行时模块和程序集是自描述的。 模块的元数据包含与另一个模块进行交互所需的全部信息。 元数据自动提供 COM 中 IDL 的功能,因此可以将一个文件同时用于定义和实现。 运行时模块和程序集甚至不需要向操作系统注册。 结果,运行时使用的说明始终反映编译文件中的实际代码,从而提高应用程序的可靠性。

  • 语言互用性和更简单的基于组件的设计。

    元数据提供所有必需的有关已编译代码的信息,以供您从用不同语言编写的 PE 文件中继承类。 您可以创建用任何托管语言(任何面向公共语言运行时的语言)编写的任何类的实例,而不用担心显式封送处理或使用自定义的互用代码。

  • 特性。

    .NET Framework 允许您在编译文件中声明特定种类的元数据(称为特性)。 特性在 .NET Framework 中处处可见,用于更精确地控制您的程序在运行时的行为。 另外,您可以通过用户定义的自定义特性,向 .NET Framework 文件发出您自己的自定义元数据。 有关详细信息,请参阅利用特性扩展元数据

标题

说明

元数据和 PE 文件结构

描述如何在 PE 文件中独立于 Microsoft 中间语言 (MSIL) 存储元数据。

元数据在运行时的作用

用一个代码示例演示元数据在运行时的使用。

利用特性扩展元数据

描述如何应用特性、编写自定义特性及检索存储在特性中的信息。

 

posted @ 2014-03-26 14:04  dai.sp  阅读(290)  评论(0编辑  收藏  举报