Partilhar via


Visão geral de tokens de metadados

Metadados refere-se a informações declarativas sobre abstrações, incluindo os tipos de tempo de execução (classes, tipos de valor e interfaces), funções global e variáveis global. Os metadados são armazenados em tabelas — uma tabela para cada categoria de abstração e uma linha da tabela para cada declaração de uma abstração. Um token (um objeto do tipo mdToken) é usado para localizar o registro que contém os metadados para uma abstração. O mecanismo de metadados usa o token de índice em uma tabela de metadados específicas em um escopo de metadados específico.

Estrutura do token de metadados

Um token de metadados é um valor de 4 byte. O byte mais significativo (MSB) Especifica o tipo de token e conseqüentemente identifica a abstração e sua tabela de metadados associados. Por exemplo, um valor de 1 no MSB significa que o token é um mdTypeRef símbolo, que representa uma referência a tipos e que seus metadados são armazenados na tabela de metadados de TypeRef; um valor de 4 no MSB corresponde a um mdFieldDef token. The CorTokenType enumeração é usada para especificar os tipos de token.

sistema autônomo três bytes inferiores, conhecido sistema autônomo identificador de registro (RID), contém o índice da linha da tabela de metadados ao qual se refere a MSB do token. Por exemplo, o token de metadados com valor 0x02000007 refere-se a linha 7 na tabela de TypeDef no escopo corrente. Da mesma forma, token 0x0400001A refere-se a linha 26 (decimal) na tabela FieldDef no escopo corrente. Linha zero de uma tabela de metadados nunca contém dados, por um símbolo de metadados cujo RID é zero é conhecido sistema autônomo um símbolo Nil. sistema autônomo metadados API define um host de tais nil tokens, uma para cada tipo de token, sistema autônomo mdTypeRefNil, com o valor 0x01000000.

ObservaçãoObservação:

A explicação anterior de RIDs está conceitual; na realidade, o layout físico dos metadados é muito mais complicado. Além disso, os tokens de seqüência de caracteres) mdString) são ligeiramente diferentes — inferiores 3 bytes não são identificadores de registros, mas representam um deslocamento para a seqüência de caracteres do começam local no pool de cadeia de caracteres de metadados.

Usando tokens de metadados

Cada DefineXXX método nos metadados do API retornará um token que pode ser passado para um GetXXX método para obter seus atributos associados.

Tokens de metadados são definidos em um escopo. Por exemplo, um token de metadados com o valor N completamente identifica, em um determinado escopo, um registro que contém detalhes sobre uma definição de tipo. No entanto, em um escopo diferente, um token de metadados com esse mesmo valor de N pode especificar um registro completamente diferente.

O token de metadados não é um identificador de objeto de metadados imutável. Quando os dois escopos são mesclados, tokens do escopo importado são remapeados em tokens no escopo emitido. Quando um escopo de metadados é salvo, várias otimizações de formato podem resultar em token remapeamento.

Tipos de token

A tabela a seguir lista os tipos de token de metadados, a abstração representando cada tipo de token e o nome da tabela de metadados que contém metadados da abstração. Todos os tipos de token são variações de mdToken, que é o tipo de token básico.

Tipo de token

Tabela de metadados

Abstração

mdModule

Module

Módulo: Uma unidade de compilação, um executável ou alguns outros unidade de desenvolvimento, unidade de implantação ou unidade de time de execução. É possível (embora não seja necessário) para declarar atributos no módulo sistema autônomo um todo, incluindo um nome, um GUID, atributos personalizados e assim por diante.

mdModuleRef

ModuleRef

Referência de módulo: Uma referência de time de compilar a um módulo, que registra fonte para que as importações de tipo e membro.

mdTypeDef

TypeDef

Declaração de tipo: Declaração de um tipo de referência em tempo de execução (classe ou interface) ou um tipo de valor.

mdTypeRef

TypeRef

Tipo de referência: Referência a um tipo de referência em tempo de execução ou um tipo de valor. De certa forma, a coleção de referências de tipo em um módulo é a coleção de dependências de importação de time de compilar.

mdMethodDef

MethodDef

Definição de método: Definição de um método sistema autônomo um membro de uma classe ou interface ou sistema autônomo um método global de nível de módulo.

mdParamDef

ParamDef

Declaração de parâmetro: Definição de uma estrutura de dados opcionais que armazena metadados adicionais para o parâmetro. Não é necessário emitir uma estrutura de dados para cada parâmetro em um método. No entanto, quando não há metadados adicionais para persistir no parâmetro, sistema autônomo informações de marshaling ou mapeamento de tipo, é possível criar uma estrutura de dados do parâmetro opcional.

mdFieldDef

FieldDef

Declaração de campo: Declaração de uma variável sistema autônomo um membro de dados de uma classe ou interface ou declaração de uma variável global, nível de módulo.

mdProperty

Propriedade

Declaração de propriedade: Declaração de uma propriedade sistema autônomo um membro de uma classe ou interface.

mdEvent

Evento

Declaração de evento: Declaração de um evento nomeado sistema autônomo um membro de uma classe ou interface.

mdMemberRef

MemberRef

Referência de membro: Referência a um método ou campo. Uma referência ao membro é gerada nos metadados para cada invocação de método ou campo de acesso que é feito por qualquer implementação no módulo corrente e um token é mantido no fluxo Microsoft intermediate linguagem (MSIL). Não há nenhum suporte de tempo de execução para referências de propriedade ou evento.

mdIfaceImpl

IfaceImpl

Implementação de interface: Implementação de uma classe específica de uma interface específica. Essa abstração de metadados permite o armazenamento das informações que é a interseção de que o que é específica para nem a classe da interface.

mdMethodImpl

MethodImpl

Implementação do método: Implementação de uma classe específica de um método herdado usando herança da interface. Essa abstração de metadados permite que as informações do ser persistentes ou seja específica para a implementação em vez de para o contrato. Informações de declaração de método não podem ser modificadas, a implementação da classe.

mdCustomAttribute

CustomAttribute

Atributo personalizado: Uma estrutura de dados arbitrário associada a qualquer objeto de metadados que pode ser referenciado com um mdToken. (Uma exceção é que os atributos personalizados próprios não podem ter atributos personalizados.)

mdPermission

Permissão

permissão definido: Um conjunto de permissões de segurança declarativa associado mdTypeDef, mdMethodDef, e mdAssembly. Para obter mais informações, consulte Adicionando suporte de segurança declarativa.

mdTypeSpec

TypeSpec

Construtor de tipo: Um método que obtém um token para um tipo (por exemplo, um tipo de valor convertidos) que pode ser usado sistema autônomo entrada para qualquer instrução MSIL que leva um tipo.

mdSignature

Assinatura

Assinatura autônoma: Uma assinatura de variável local no arquivo executável portátil (PE) ou assinatura de um método que é passada para uma instrução MSIL.

mdString

String

Cadeia de caracteres do usuário: Uma seqüência de caracteres que é passada para uma instrução MSIL.

ObservaçãoObservação:

A lista anterior não inclui dois token tipos separados, um para uma referência de campo e outro para obter uma referência de método, sistema autônomo pode ser esperado. Método e campo referências compartilham a mesma tabela e pode ser referenciado com o tipo de token mdMemberRef.

Extensibilidade e abstrações

Tempo de execução de metadados é extensível, o que é importante nas seguintes situações:

  • Para representar as restrições ou abstrações de nível mais alto definidas pelo CLS (Common linguagem Specification). O CLS é uma especificação das convenções de linguagens e ferramentas concordar com suporte em um modo uniforme para uma melhor integração de linguagem. O CLS pode restringir partes do modelo de sistema de tipo comum, e o CLS pode introduzir abstrações de nível mais alto que disposto em camadas sobre o CTS. Metadados devem ser capaz de capturar esses tipos de abstrações de time de desenvolvimento usados pelas ferramentas, embora as abstrações não são reconhecidas ou explicitamente aceita pelo time de execução.

  • Para representar abstrações específicos do linguagem que não fazem parte do common type sistema e não são abstrações de CLS. Isso permite que idiomas como o Visual C para não exigir IDL arquivos ou arquivos de cabeçalho separada para usar tipos, métodos e membros de dados exportados por módulos compilados.

  • Para codificar tipos de assinatura no membro e digite modificadores que são usados na sobrecarga de específico a um linguagem.

Extensibilidade de metadados tem os seguintes formulários:

  • Cada objeto de metadados pode oferecer suporte a atributos personalizados e os metadados APIs fornecem uma maneira de declarar, enumerar e recuperar atributos personalizados. Atributos personalizados podem ser identificados por um tipo de referência (mdTypeDef e mdTypeRef). A estrutura de atributo personalizado é autodescritivo, usando membros de dados declarados no tipo, e o valor de codificação é navegável por qualquer ferramenta, incluindo os serviços de reflexão em tempo de execução.

  • Além de estender o CTS, é possível emitir modificadores personalizados em assinaturas de membros. O tempo de execução manterá esses modificadores para método de sobrecarga e ocultando, bem sistema autônomo para a ligação, mas não irá impor qualquer semântica específico a um linguagem.

Consulte também

Outros recursos

Visão geral dos metadados