Compartilhar via


<ImpliesType> Element (.NET Native)

Aplica a política a um tipo, se ela foi aplicada ao tipo recipiente ou do método.

Syntax

<ImpliesType Name="type_name"
             Activate="policy_type"
             Browse="policy_type"
             Dynamic="policy_type"
             Serialize="policy_type"
             DataContractSerializer="policy_setting"
             DataContractJsonSerializer="policy_setting"
             XmlSerializer="policy_setting"
             MarshalObject="policy_setting"
             MarshalDelegate="policy_setting"
             MarshalStructure="policy_setting" />

Atributos e elementos

As seções a seguir descrevem atributos, elementos filho e elementos pai.

Atributos

Atributo Tipo de atributo Descrição
Name Geral Atributo obrigatório. Especifica o nome do tipo.
Activate Reflexão Atributo opcional . Controla o acesso de runtime a construtores para habilitar a ativação de instâncias.
Browse Reflexão Atributo opcional . Controla a consulta para obter informações sobre elementos do programa, mas não permite qualquer acesso de runtime.
Dynamic Reflexão Atributo opcional . Controla o acesso a todos os tipos de membro ao runtime, incluindo construtores, métodos, campos, propriedades e eventos, habilitando a programação dinâmica.
Serialize Serialização Atributo opcional . Controla o acesso ao runtime para construtores, campos e propriedades para habilitar a serialização e desserialização das instâncias por bibliotecas como o serializador Newtonsoft JSON.
DataContractSerializer Serialização Atributo opcional . Controla a política de serialização que usa a classe System.Runtime.Serialization.DataContractSerializer.
DataContractJsonSerializer Serialização Atributo opcional . Controla a política de serialização JSON que usa a classe System.Runtime.Serialization.Json.DataContractJsonSerializer.
XmlSerializer Serialização Atributo opcional . Controla a política de serialização XML que usa a classe System.Xml.Serialization.XmlSerializer.
MarshalObject Interoperabilidade Atributo opcional . Política de controles de marshaling de tipos de referência para o Windows Runtime e COM.
MarshalDelegate Interoperabilidade Atributo opcional . Controla a diretiva de marshaling de tipos delegados como ponteiros de função para código nativo.
MarshalStructure Interoperabilidade Atributo opcional . Controla a política de marshaling de tipos de valor para código nativo.

Atributo de nome

Valor Descrição
type_name O nome do tipo. Se o tipo representado por este elemento <ImpliesType> estiver localizado no mesmo namespace contendo seu elemento <Type>, o type_name poderá incluir o nome do tipo sem o respectivo namespace. Caso contrário, o type_name deverá incluir o nome do tipo totalmente qualificado.

Todos os outros atributos

Valor Descrição
policy_setting A configuração a ser aplicada a este tipo de política. Os valores possíveis são All, Auto, Excluded, Public, PublicAndInternal, Required Public, Required PublicAndInternal e Required All. Para obter mais informações, consulte Configurações da política da diretiva de runtime.

Elementos filho

Nenhum.

Elementos pai

Elemento Descrição
<Tipo> Aplica a política de reflexão a um tipo e todos os seus membros.
<TypeInstantiation> Aplica a política de reflexão a um tipo genérico construído e todos os seus membros.
<Método> Aplica a política de reflexão a um método.

Comentários

O elemento <ImpliesType> destina-se principalmente para uso por bibliotecas. Ele aborda o cenário a seguir:

  • Se uma rotina precisa refletir em um tipo, ela necessariamente precisa refletir no segundo tipo.

  • Os metadados para a instanciação implícita do segundo tipo não estão disponíveis, pois a análise estática não indica que é necessário.

Geralmente, os dois tipos são instanciações genéricas com argumentos de tipo compartilhados.

O elemento <ImpliesType> foi definido presumindo que a necessidade de reflexão no tipo especificado pelo seu elemento pai implica a necessidade de reflexão no tipo especificado pelo elemento <ImpliesType>. Por exemplo, as seguintes diretivas de reflexão aplicam-se a dois tipos, Explicit<T> e Implicit<T>.

<Type Name="Explicit{ET}">
    <ImpliesType Name="Implicit{ET}" Dynamic="Required Public" />
</Type>

Essa diretiva não tem efeito, a menos que uma instanciação de Explicit tenha uma configuração de política Dynamic definida. Por exemplo, se for o caso de Explicit<Int32>, Implicit<Int32> é instanciado com seu membros públicos enraizados e seus metadados são disponibilizados por programação dinâmica.

Veja a seguir um exemplo real que se aplica a pelo menos um serializador. As diretivas capturam o requisito de que a reflexão sobre algo digitado como IList<algo> também envolve reflexão sobre o tipo List<algo> correspondente sem exigir nenhuma anotação por aplicativo.

<Type Name="System.Collections.Generic.IList{T}">
   <ImpliesType Name="System.Collections.Generic.List{T}" Serialize="Public" />
</Type>

O elemento <ImpliesType> também pode aparecer em um elemento <Method>, pois em alguns casos instanciar um método genérico implica refletir em uma instanciação de um tipo. Por exemplo, imagine um método genérico IEnumerable<T> MakeEnumerable<T>(string spelling, T defaultValue) que uma determinada biblioteca acessará dinamicamente juntamente com os tipos List<T> e Array associados. Isso pode ser expressado como:

<Type Name="MyType">
    <Method Name="MakeEnumerable{T}" Signature="(System.String, T)" Dynamic="Included">
        <ImpliesType Name="T[]" Dynamic="Public" />
        <ImpliesType Name="System.Collections.Generic.List{T}" Dynamic="Public" />
    </Method>
</Type>

Confira também