Compartilhar via


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

Confira também