元数据 (CLI)
通用语言架构(CLI)中的元数据是指嵌入通用中间语言(CIL)代码中的某些数据结构,用于描述代码的高级结构。元数据描述程序集中定义的所有类和类成员,以及当前程序集将从另一个程序集中调用的类和类成员。方法的元数据包含该方法的完整描述,包括类(以及包含该类的程序集)、return type和所有方法参数。 CLI语言编译器将生成元数据并将其存储在包含CIL的程序集中。当运行时执行CIL时,它将检查以确保被调用方法的元数据与存储在调用方法中的元数据相同。这确保了只能使用正确数量的参数和正确的参数类型来调用方法。 Windows Runtime应用程序平台存在于Windows 8和Windows Phone 8中,它使用CLI元数据格式来描述以任何支持的编程语言编写的代码的组件接口。与通用語言運行庫中使用的不同之处在于,程序集通常不包含任何CIL指令。[1] 特性开发人员可以通过“特性”(attribute)将元数据添加到代码中。有两种类型的特性,自定义特性和伪自定义特性,对开发人员来说,它们具有相同的句法。代码中的特性是给编译器生成元数据的消息。在CIL中,诸如继承修饰符、作用域修饰符之类的元数据,以及几乎所有不是操作码或流的东西,也被称为特性。 自定义特性是一个常规的类,它继承自 [Custom]
[Custom(1)]
[Custom(1, Comment="yes")]
CLI广泛使用自定义特性。Windows Communication Framework使用特性来定义服务契约,ASP.NET使用这些特性将方法公开为Web服务,LINQ to SQL使用它们来定义类到基础关系架构的映射,Microsoft Visual Studio使用它们将对象的属性分组在一起,类开发人员通过应用 class CustomAttribute : Attribute
{
private int paramNumber = 0;
private string comment = "";
public CustomAttribute() { }
public CustomAttribute(int num) { paramNumber = num; }
public String Comment
{
set { comment = value; }
}
}
类的名称将映射到特性名称。Visual C#编译器会自动在任何特性名称的末尾添加字符串“ 有时,程序员所附加的属性会有歧义。请考虑以下代码: [Orange]
public int ExampleMethod(string input)
{
//method body goes here
}
What has been marked as orange? Is it the 伪自定义特性与常规自定义特性一样使用,但它们没有自定义处理程序;相反,编译器具有对特性的内在感知,并以不同的方式处理标记有这些特性的代码。诸如 元数据存储程序集包含元数据表。这些表格由CIL规范描述。元数据表将具有零个或多个条目,并且条目的位置决定其索引。当CIL代码使用元数据时,它通过元数据令牌(token)来使用元数据。这是一个32-比特值,其中前8位标识适当的元数据表,其余24位给出表中元数据的索引。Framework SDK包含一个名为 在CIL标准中,元数据以ILAsm(汇编语言)形式、用于存储的磁盘上表示形式以及嵌入可移植可执行文件(PE、.exe或.dll)格式的程序集中的形式进行定义。PE表格基于磁盘上的表格。 反射反射是用于读取CLI元数据的API。反射API提供元数据的逻辑视图,而不是metainfo等工具提供的文本视图。.NET框架1.1版中的反射可用于检查类及其成员的描述,并调用方法。但是,它不允许在运行时访问方法的CIL。该框架的2.0版允许获得方法的CIL。 其他元数据工具除了 参见参考文献
|