<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>