<Elemento Subtypes (.NET Native)>
Aplica la directiva en tiempo de ejecución a todas las clases heredadas del tipo contenedor.
Sintaxis
<Subtypes 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 |
---|---|---|
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. |
Todos los 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. |
Comentarios
El elemento <Subtypes>
aplica la directiva a todos los subtipos de su tipo contenedor. Se usa cuando se quieren aplicar directivas distintas a los tipos derivados y sus clases base.
Todos los atributos de reflexión, serialización e interoperabilidad son opcionales, aunque al menos uno debe estar presente.
Ejemplo
En el siguiente ejemplo se define una clase denominada BaseClass
y una subclase denominada Derived1
.
namespace Examples.Libraries
{
public class BaseClass
{
public BaseClass()
{ }
public override string ToString()
{
return String.Format("{0} Version {1}", this.GetType().Name, Version);
}
public virtual double Version
{ get { return 1.0; }}
}
public class Derived1 : BaseClass
{
public Derived1() : base()
{}
public override double Version
{ get { return 1.1; }}
public override string ToString()
{
return String.Format("{0} Version {1}", this.GetType().Name, Version);
}
}
}
Como se muestra en el siguiente código, el archivo de directivas en tiempo de ejecución establece explícitamente las directivas Dynamic
y Activate
para BaseClass
en Excluded
. Debido a esto, no se pueden crear instancias de los objetos de tipo BaseClass
ni dinámicamente ni mediante llamadas al constructor de clases BaseClass
. Sin embargo, el elemento <Subtypes>
permite que se puedan crear instancias de las clases derivadas de BaseClass
tanto dinámicamente como a través de llamadas a sus constructores de clases.
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<Assembly Name="*Application*" Dynamic="Required All" />
<Type Name="Examples.Libraries.BaseClass" Activate ="Excluded" Dynamic="Excluded" >
<Subtypes Activate="Public" Dynamic ="Public"/>
</Type>
</Application>
</Directives>
Debido a la directiva <Subtypes>
, el siguiente código, que crea una instancia de Derived1
dinámicamente mediante una llamada al método Activator.CreateInstance(Type), se ejecuta correctamente. La variable de bloque aquí es un TextBlock objeto en una aplicación para UWP en blanco.
namespace Examples
{
using System.Reflection;
using Examples.Libraries;
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
Derived1 d1 = new Derived1();
block.Text += d1.ToString() + Environment.NewLine;
Type derivedType = typeof(Derived1);
Object obj = Activator.CreateInstance(derivedType);
block.Text += obj.GetType().FullName + Environment.NewLine;
}
}
}
Consulte también
- <Elemento Type>
- 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)