Partilhar via


Visão geral do descritor de tipo

The TypeDescriptor arquitetura aprimora os recursos de reflexão do .NET.

Arquitetura do descritor de tipo

The TypeDescriptor arquitetura se baseia no mecanismo central reflexão e adiciona regras adicionais e recursos. Por exemplo, a TypeDescriptor classe dá suporte à mesclagem propriedades de extensão de um IContainer, e também suporta filtragem propriedades e eventos por meio de um IDesigner.

Além disso, a TypeDescriptor a arquitetura permite que vários recursos. A tabela a seguir mostra recursos a arquitetura.

Recurso

Descrição

Substituição de instância

Permite que um tipo a ser criado quando for solicitado outro tipo arbitrário.

Substituição de metadados

Permite que os metadados do objeto a ser modificada.

Redirecionamento de atributo

Permite que atributos seja especificado dinamicamente.

Substituição de destino e sombreamento

Permite que um objeto de suporte outro.

Suporte de descritor de tipo estendido

Permite acesso a propriedades de objeto adicionadas por outros objetos.

Para oferecer suporte a esses recursos, a TypeDescriptor classe integra-se perfeitamente com os vários recursos do modelo de componente do .NET estrutura. Ele é compatível com objetos COM, provedores de extensor, designers e propriedades CLR.

Observação:

Você pode usar o TypeDescriptor arquitetura no seu código de time de execução, bem sistema autônomo seu código em time de design.

Para oferecer suporte à extensibilidade, a TypeDescriptor classe tem uma classe complementar chamada TypeDescriptionProvider e um atributo complementar chamado TypeDescriptionProviderAttribute. Você pode usar um TypeDescriptionProviderAttribute em uma classe para introduzir uma forma completamente diferente de expor metadados que atenda às suas metas de design.

Classe TypeDescriptionProvider

The TypeDescriptionProvider classe pode ser considerada sistema autônomo um plug-in para o TypeDescriptor classe. Para uma instância específica de TypeDescriptor, pode haver várias classes de provedor de descrição de tipo, todos os metadados de oferta para o TypeDescriptor.

Atributo TypeDescriptionProvider

The TypeDescriptionProviderAttribute é um atributo que você pode colocar em uma classe. Este atributo é usado para indicar o tipo tem um provedor personalizado de descrição de tipo associado a ele.Por sua vez, o atributo fornece uma maneira, por meio de metadados, para instalar um provedor de descrição de tipo.Quando esse tipo é passado para qualquer API o TypeDescriptor classe, TypeDescriptor detecta esse atributo, cria uma instância do provedor de descrição de tipo descrito dentro dele e conecta o provedor nas tabelas de internas do TypeDescriptor. Depois de fazer isso é concluído, TypeDescriptor continua o processamento da API. O processamento permite que um tipo instalar um provedor de descrição de tipo personalizado automaticamente sob demanda.

Recursos do descritor de tipo

The TypeDescriptor a arquitetura possibilita recursos além daqueles fornecidos pela reflexão do .NET estrutura.

Substituição de instância

Substituição de instância ocorre quando você deseja criar um tipo, mas o tipo que seja realmente criado é diferente da que foi solicitada.Substituição de instância é realizada quando você substitui todas as chamadas de new com chamadas para o CreateInstance método. Este método pesquisa tabelas internas dentro de TypeDescriptor para um TypeDescriptionProvider objeto que está associado ao tipo de dados determinada. Se encontrar, ele delega a telefonar para esse objeto.

Substituição de metadados

Metadados substituição ocorre quando você desejar modificar os metadados disponível para um ou mais objetos.Um aplicativo comum de substituição de metadados é na implementação de designers.Substituição de metadados pode ser realizada com provedores de descrição de tipo, que podem ser adicionados e removidos usando os métodos a seguir em TypeDescriptor:

Redirecionamento de atributo

Há alguns casos no modelo de objeto do .NET estrutura no qual o tipo de uma propriedade propositadamente é feito para ser não-específica.Por exemplo, a DataSource propriedade no DataGridView classe é digitada sistema autônomo object. Esse design permite que a fonte de dados para aceitar vários tipos de entrada, mas não fornece nenhum lugar comum para adicionar metadados para descrever as características da propriedade.Cada propriedade de fonte de dados em todo o .NET estrutura precisa ter metadados idênticos para conversores de tipo e editores de tipo de interface do usuário.

The AttributeProviderAttribute classe resolve essa situação. Quando esse atributo é colocado em uma propriedade, as regras alteradas para a obtenção de atributos do descritor de propriedade Attributes coleção. Normalmente, o descritor de propriedade reúne atributos locais e mescla-los com atributos do tipo de propriedade.Quando o AttributeProviderAttribute atributo é aplicado, os atributos são retirados do tipo retornado AttributeProviderAttribute, não do tipo de propriedade real. The AttributeProviderAttribute é usado em fontes de dados para apontar o tipo específico da fonte de dados para IListSource, e os metadados apropriados é colocado no IListSource Para habilitar vinculação de dados. Esse redirecionamento permite que sistema autônomo parceiros externos sistema autônomo o Visual Studio para com com facilidade adicionar metadados a todas sistema autônomo fontes de dados.

Obtido de um tipo de atributos declarados no AttributeProviderAttribute ter uma prioridade entre os atributos de tipo da propriedade e os atributos na propriedade. O conjunto completo de atributos disponível é a fusão, na ordem de prioridade, sistema autônomo mostrado na seguinte lista:

  1. Propriedade Attributes

  2. Atributo provedor atributos

  3. Atributos de tipo de propriedade

Substituição de destino e sombreamento

Destino substituição ocorre quando um objeto significa para outro.Um aplicativo comum de substituição de destino é na implementação de designers.

Na arquitetura do .NET estrutura designer, um componente pode ter um designer associado a ele.Esse designer pode implementar IDesignerFilter e forneça suas próprias propriedades. Essas propriedades são mescladas na propriedade definido para o componente ao qual o designer está associado.Essas propriedades podem ser novos para o componente.Elas também podem ter o mesmo nome e tipo sistema autônomo propriedades já definidas no componente.Quando a nova propriedade compartilha o nome e o tipo sistema autônomo uma propriedade existente, ele é chamado sombreamento, porque o designer oculta, ou sistema autônomo sombras, a propriedade existente no componente.A ilustração a seguir mostra o efeito de sombra de uma propriedade.

Aqui, o componente oferece duas propriedades e o designer também oferece duas propriedades.The Text propriedade é oferecida no designer e o componente e está sendo sombreada. O resultado final de uma telefonar a GetProperties é três propriedades. Existir no componente e os outros dois existem no designer.

Essa propriedade filtragem é feito por meio do uso de ITypeDescriptorFilterService, que implementa a área de design. TypeDescriptor recursos são necessários quando é time de conjunto um valor na propriedade. O código para conjunto um valor em oGrid propriedade teria esta aparência:

    gridProp.SetValue(component, value);

As informações de tipo real sobre a propriedade aponta para uma instância de designer, não o componente.Se uma telefonar de reflexão tiverem sido feita para conjunto a propriedade na verdade, a telefonar aumentaria uma exceção de invocação de destino porque a instância do componente não corresponde ao tipo designer.

The TypeDescriptor classe possui lógica inerente para contornar essa situação. Quando é feita uma telefonar de propriedade, a TypeDescriptor classe verifica se o tipo de membro for uma instância do objeto passado. Em caso afirmativo, ele permite a telefonar prossiga.Caso contrário, a classe tenta localizar o criador do objeto e se o designer pode ser encontrado e for do tipo correto, a classe substitui a ocorrência do componente com a instância do designer.

Os seguintes métodos na TypeDescriptor suporte a substituição de destino:

Tipo de descritor suporte ampliado

The GetExtendedTypeDescriptor método retorna um descritor de tipo personalizado estendido do objeto fornecido. Um descritor de tipo estendido é um descritor de tipo personalizado que oferece propriedades que outros objetos adicionou a este objeto, mas na verdade não são definidos no objeto.Por exemplo, no modelo de componente do .NET estrutura, objetos que implementam o IExtenderProvider interface pode anexar propriedades a outros objetos que residem na mesma IContainer. The GetTypeDescriptor método não retorna um descritor de tipo, que fornece essas propriedades estendidas extra, mas GetExtendedTypeDescriptor Retorna o conjunto dessas propriedades estendidas. The TypeDescriptor classe automaticamente mescla os resultados dessas coleções de duas propriedades.

Observação:

Embora o modelo de componentes do .NET estrutura ofereça suporte somente às propriedades estendidas, GetExtendedTypeDescriptor pode ser usado para atributos estendidos e eventos da mesma forma, se o provedor de descrição de tipo oferecer suporte a ele.

Consulte também

Referência

TypeDescriptor

TypeDescriptionProvider

TypeDescriptionProviderAttribute

ICustomTypeDescriptor

CustomTypeDescriptor

IContainer

IDesigner

Outros recursos

Estendendo suporte em tempo de design