<Elemento> Subtypes (.NET Native)

Applica i criteri di runtime a tutte le classi ereditate per il tipo contenitore.

Sintassi

<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" />

Attributi ed elementi

Nelle sezioni seguenti vengono descritti gli attributi, gli elementi figlio e gli elementi padre.

Attributi

Attributo Tipo di attributo Descrizione
Activate Reflection Attributo facoltativo. Controlla l'accesso in fase di esecuzione ai costruttori per abilitare l'attivazione di istanze.
Browse Reflection Attributo facoltativo. Controlla le query per le informazioni sugli elementi di programma, ma non abilita l'accesso in fase di esecuzione.
Dynamic Reflection Attributo facoltativo. Controlla l'accesso in fase di esecuzione a tutti i membri dei tipi, inclusi costruttori, metodi, campi, proprietà ed eventi, per abilitare la programmazione dinamica.
Serialize Serializzazione Attributo facoltativo. Controlla l'accesso in fase di esecuzione a costruttori, campi e proprietà per abilitare la serializzazione e la deserializzazione delle istanze del tipo da parte di librerie quali il serializzatore JSON di Newtonsoft.
DataContractSerializer Serializzazione Attributo facoltativo. Controlla i criteri per la serializzazione che usano la classe System.Runtime.Serialization.DataContractSerializer.
DataContractJsonSerializer Serializzazione Attributo facoltativo. Controlla i criteri per la serializzazione JSON che usano la classe System.Runtime.Serialization.Json.DataContractJsonSerializer.
XmlSerializer Serializzazione Attributo facoltativo. Controlla i criteri per la serializzazione XML che usano la classe System.Xml.Serialization.XmlSerializer.
MarshalObject Interop Attributo facoltativo. Controlla i criteri per effettuare il marshalling dei tipi di riferimento a Windows Runtime e COM.
MarshalDelegate Interop Attributo facoltativo. Controlla i criteri per effettuare il marshalling dei tipi delegati come puntatori a funzioni al codice nativo.
MarshalStructure Interop Attributo facoltativo. Controlla i criteri per il marshalling dei tipi di valore al codice nativo.

Tutti gli attributi

Valore Descrizione
policy_setting L'impostazione da applicare a questo tipo di criteri. I valori consentiti sono All, Auto, Excluded, Public, PublicAndInternal, Required Public, Required PublicAndInternal e Required All. Per altre informazioni, vedere Runtime Directive Policy Settings (Impostazioni dei criteri delle direttive di runtime).

Elementi figlio

Nessuno.

Elementi padre

Elemento Descrizione
<Tipo> Applica i criteri di reflection a un tipo e a tutti i membri.

Osservazioni:

L'elemento <Subtypes> applica i criteri a tutti i sottotipi del tipo contenitore. Viene usato per applicare criteri diversi ai tipi derivati e alle classi base.

Gli attributi di reflection, serializzazione e interoperabilità sono tutti facoltativi, ma è necessario usarne almeno uno.

Esempio

L'esempio seguente definisce una classe denominata BaseClass e una sottoclasse denominata 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);
      }
   }
}

Come mostrato nel seguente codice, il file di direttive di runtime imposta esplicitamente i criteri Dynamic e Activate per BaseClass su Excluded. Di conseguenza, non è possibile creare un'istanza degli oggetti di tipo BaseClass dinamicamente o mediante chiamate al costruttore di classi BaseClass. Tuttavia, l'elemento <Subtypes> consente di creare un'istanza delle classi derivate da BaseClass dinamicamente e mediante chiamate ai relativi costruttori di classi.

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

Grazie alla direttiva <Subtypes>, il seguente codice che crea dinamicamente un'istanza Derived1 chiamando il metodo Activator.CreateInstance(Type) viene eseguito correttamente. La variabile di blocco qui è un TextBlock oggetto in un'app UWP vuota.

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

Vedi anche