Compartir a través de


<Elemento ImpliesType> (.NET Native)

Aplica una directiva a un tipo, si dicha directiva se ha aplicado al tipo contenedor o al método.

Sintaxis

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

En las siguientes secciones se describen los atributos, los elementos secundarios y los elementos primarios.

Atributos

Attribute Tipo de atributo Descripción
Name General Atributo necesario. Especifica el nombre de tipo.
Activate Reflexión Atributo opcional. Controla el acceso en tiempo de ejecución a los constructores para permitir la activación de instancias.
Browse Reflexión Atributo opcional. Controla la consulta para obtener información sobre los elementos de programa, pero no permite el acceso en tiempo de ejecución.
Dynamic Reflexión Atributo opcional. Controla el acceso en tiempo de ejecución a todos los miembros de tipo (incluidos constructores, métodos, campos, propiedades y eventos) para permitir la programación dinámica.
Serialize Serialización Atributo opcional. Controla el acceso en tiempo de ejecución a constructores, campos y propiedades para permitir que bibliotecas como el serializador JSON Newtonsoft puedan serializar y deserializar instancias de tipo.
DataContractSerializer Serialización Atributo opcional. Controla la directiva de serialización que usa la clase System.Runtime.Serialization.DataContractSerializer.
DataContractJsonSerializer Serialización Atributo opcional. Controla la directiva de serialización JSON que usa la clase System.Runtime.Serialization.Json.DataContractJsonSerializer.
XmlSerializer Serialización Atributo opcional. Controla la directiva de serialización XML que usa la clase System.Xml.Serialization.XmlSerializer.
MarshalObject Interop Atributo opcional. Controla la directiva de serialización de tipos de referencia a Windows Runtime y COM.
MarshalDelegate Interop Atributo opcional. Controla la directiva de serialización de tipos de delegado como punteros de función a código nativo.
MarshalStructure Interop Atributo opcional. Controla la directiva de cálculo de referencias de tipos de valor a código nativo.

Name (atributo)

Valor Descripción
type_name Nombre de tipo. Si el tipo representado por este elemento <ImpliesType> se encuentra en el mismo espacio de nombres que su elemento contenedor <Type>, type_name puede incluir el nombre del tipo sin su espacio de nombres. De lo contrario, type_name debe incluir el nombre de tipo completo.

Resto de atributos

Valor Descripción
policy_setting Configuración que se va a aplicar a este tipo de directiva. Los valores posibles son All, Auto, Excluded, Public, PublicAndInternal, Required Public, Required PublicAndInternal y Required All. Para obtener más información, vea Runtime Directive Policy Settings (Configuración de directiva de la directiva en tiempo de ejecución).

Elementos secundarios

Ninguno.

Elementos primarios

Elemento Descripción
<Tipo> Aplica la directiva de reflexión a un tipo y a todos sus miembros.
<TypeInstantiation> Aplica la directiva de reflexión a un tipo genérico construido y a todos sus miembros.
<Método> Aplica la directiva de reflexión a un método.

Comentarios

El elemento <ImpliesType> sirve principalmente para que lo utilicen las bibliotecas. Está pensado para el siguiente escenario:

  • Si una rutina debe reflejarse en un determinado tipo, necesariamente debe reflejarse en un segundo tipo.

  • Los metadatos para la creación de instancias implícita del segundo tipo no está disponible, ya que el análisis estático no indica si es necesario.

Normalmente, los dos tipos son instancias genéricas con argumentos de tipo compartido.

El elemento <ImpliesType> se definió con la suposición de que una necesidad de reflexión en el tipo especificado por su elemento primario implica una necesidad de reflexión en el tipo especificado por el elemento <ImpliesType>. Por ejemplo, las siguientes directivas de reflexión se aplican en dos tipos, Explicit<T> y Implicit<T>.

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

Esta directiva no tiene ningún efecto a menos que una instancia de Explicit tenga definida una configuración de directiva Dynamic. Por ejemplo, si es el caso de Explicit<Int32>, se crea una instancia de Implicit<Int32> con sus miembros públicos enraizados, y sus metadatos se vuelven accesibles para programación dinámica.

El siguiente es un ejemplo del mundo real en el que se aplica al menos un serializador. Las directivas recogen el requisito de que el reflejo en algo tipado como IList<something> también implica un reflejo en el tipo List<something> correspondiente sin necesidad de exigir ninguna anotación por aplicación.

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

El elemento <ImpliesType> también puede aparecer dentro de un elemento <Method>, ya que en algunos casos crear instancias de un método genérico implica que se refleje en la creación de instancias de un tipo. Por ejemplo, imagine un método genérico IEnumerable<T> MakeEnumerable<T>(string spelling, T defaultValue) al que una determinada biblioteca tendrá acceso dinámicamente junto con los tipos asociados List<T> y Array. Esto puede expresarse 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>

Consulte también