Partager via


<Subtypes, élément (.NET Native)>

Applique la stratégie runtime à toutes les classes héritées du type conteneur.

Syntaxe

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

Attributs et éléments

Les sections suivantes décrivent des attributs, des éléments enfants et des éléments parents.

Attributs

Attribut Type d'attribut Description
Activate Réflexion Attribut facultatif. Contrôle l'accès aux constructeurs pour permettre l'activation d'instances au moment de l'exécution.
Browse Réflexion Attribut facultatif. Contrôle la demande d'informations sur les éléments de programme, mais ne permet pas l'accès au moment de l'exécution.
Dynamic Réflexion Attribut facultatif. Contrôle l'accès à l'exécution à tous les membres de types, y compris les constructeurs, les méthodes, les champs, les propriétés et les événements, pour permettre la programmation dynamique.
Serialize Sérialisation Attribut facultatif. Contrôle l'accès au moment de l'exécution aux constructeurs, champs et propriétés, pour permettre la sérialisation et la désérialisation des instances de types par des bibliothèques comme le sérialiseur JSON Newtonsoft.
DataContractSerializer Sérialisation Attribut facultatif. Contrôle la stratégie pour la sérialisation qui utilise la classe System.Runtime.Serialization.DataContractSerializer.
DataContractJsonSerializer Sérialisation Attribut facultatif. Contrôle la stratégie pour la sérialisation JSON qui utilise la classe System.Runtime.Serialization.Json.DataContractJsonSerializer.
XmlSerializer Sérialisation Attribut facultatif. Contrôle la stratégie pour la sérialisation XML qui utilise la classe System.Xml.Serialization.XmlSerializer.
MarshalObject Interop Attribut facultatif. Contrôle la stratégie pour le marshaling des types de références vers Windows Runtime et COM.
MarshalDelegate Interop Attribut facultatif. Contrôle la stratégie pour le marshaling des types de délégués comme pointeurs de fonction vers du code natif.
MarshalStructure Interop Attribut facultatif. Contrôle la stratégie pour le marshaling des types de valeurs vers du code natif.

Tous les attributs

Valeur Description
policy_setting Paramètre à appliquer à ce type de stratégie. Les valeurs possibles sont All, Auto, Excluded, Public, PublicAndInternal, Required Public, Required PublicAndInternal et Required All. Pour plus d’informations, consultez Paramètres de stratégie de directive runtime.

Éléments enfants

Aucune.

Éléments parents

Élément Description
<Type> Applique la stratégie de réflexion à un type et à tous ses membres.

Notes

L'élément <Subtypes> applique la stratégie à tous les sous-types de son type conteneur. Utilisez-le pour appliquer des stratégies distinctes aux types dérivés et à leurs classes de base.

Les attributs de réflexion, de sérialisation et d'interopérabilité sont tous facultatifs, même si un au moins doit être présent.

Exemple

L'exemple suivant définit une classe nommée BaseClass et une sous-classe nommée 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);
      }
   }
}

Comme le montre le code suivant, le fichier de directives runtime définit explicitement les stratégies Dynamic et Activate pour BaseClass sur Excluded. Ainsi, les objets de type BaseClass ne peuvent pas être instanciés dynamiquement ou par des appels du constructeur de classe BaseClass. Toutefois, l'élément <Subtypes> permet aux classes dérivées de BaseClass d'être instanciées dynamiquement et via des appels de leurs constructeurs 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>

Grâce à la directive <Subtypes>, le code suivant qui instancie une instance Derived1 dynamiquement en appelant la méthode Activator.CreateInstance(Type) s'exécute correctement. La variable de bloc ici est un TextBlock objet dans une application UWP vide.

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

Voir aussi