<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
- Referencia del archivo de configuración de directivas en tiempo de ejecución (rd.xml)
- Elementos de directivas en tiempo de ejecución
- Runtime Directive Policy Settings (Configuración de directiva de la directiva en tiempo de ejecución)