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