<Elemento Subtypes (.NET Native)>
Aplica a política de runtime a todas as classes herdadas do tipo recipiente.
Syntax
<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 e elementos
As seções a seguir descrevem atributos, elementos filho e elementos pai.
Atributos
Atributo | Tipo de atributo | Descrição |
---|---|---|
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. |
Todos os 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. |
Comentários
O elemento <Subtypes>
aplica a política a todos os subtipos de seu tipo recipiente. Use-o quando desejar aplicar políticas diferentes a tipos derivados e suas classes base.
Os atributos de reflexão, serialização e interoperabilidade são todos opcionais, embora pelo menos um deve estar presente.
Exemplo
O exemplo a seguir define uma classe chamada BaseClass
e uma subclasse 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);
}
}
}
Conforme mostrado no código a seguir, o arquivo de diretivas de runtime define explicitamente o Dynamic
e Activate
políticas para BaseClass
para Excluded
. Devido a isso, objetos do tipo BaseClass
não pode ser instanciada dinamicamente ou por chamadas para o construtor da classe BaseClass
. No entanto, o elemento <Subtypes>
permite que classes derivadas de BaseClass
sejam instanciadas dinamicamente e por meio de chamadas para seus construtores de classe.
<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>
Devido à diretiva <Subtypes>
, o seguinte código instancia uma instância Derived1
dinamicamente chamando o método Activator.CreateInstance(Type), que é executado com êxito. A variável de bloco aqui é um TextBlock objeto em um aplicativo UWP em branco.
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;
}
}
}