Partager via


<Élément ImpliesType> (.NET Native)

Applique la stratégie à un type, si cette stratégie a été appliquée à la méthode ou au type conteneur.

Syntaxe

<ImpliesType Name="type_name"
             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
Name Généralités Attribut requis. Spécifie le nom du type.
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.

Name (attribut)

Valeur Description
TYPE_NAME Nom du type. Si le type représenté par cet élément <ImpliesType> se trouve dans le même espace de noms que son élément <Type> conteneur, type_name peut inclure le nom du type sans son espace de noms. Dans le cas contraire, type_name doit inclure le nom de type complet.

Tous les autres 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.
<TypeInstantiation> Applique la stratégie de réflexion à un type générique construit et à tous ses membres.
<Méthode> Applique la stratégie de réflexion à une méthode.

Notes

L'élément <ImpliesType> est essentiellement conçu pour une utilisation par des bibliothèques. Il traite le scénario suivant :

  • Si une routine a besoin de réfléchir un type, elle doit nécessairement réfléchir un second type.

  • Sinon, les métadonnées de l'instanciation implicite du second type sont indisponibles, car l'analyse statique n'indique pas qu'elles sont nécessaires.

En règle générale, les deux types sont des instanciations génériques partageant des arguments de type.

L'élément <ImpliesType> a été défini en partant du principe que la nécessité de réfléchir le type spécifié par son élément parent implique la nécessité de réfléchir le type spécifié par l'élément <ImpliesType>. Par exemple, les directives de réflexion suivantes s'appliquent aux deux types Explicit<T> et Implicit<T>.

<Type Name="Explicit{ET}">
    <ImpliesType Name="Implicit{ET}" Dynamic="Required Public" />
</Type>

Cette directive n'a d'effet que si une instanciation d'Explicit possède un paramètre de stratégie Dynamic défini. Par exemple, si c'est le cas pour Explicit<Int32>, Implicit<Int32> est instancié avec ses membres publics associés à une racine, et leurs métadonnées sont accessibles pour une programmation dynamique.

Voici un exemple concret qui s'applique à au moins un sérialiseur. Les directives capturent le fait que la réflexion d’un élément de type IList<quelque chose> implique nécessairement la réflexion du type List<quelque chose> correspondant sans nécessiter d’annotation par application.

<Type Name="System.Collections.Generic.IList{T}">
   <ImpliesType Name="System.Collections.Generic.List{T}" Serialize="Public" />
</Type>

L'élément <ImpliesType> peut également apparaître dans un élément <Method>, car dans certains cas l'instanciation d'une méthode générique implique la réflexion d'une instanciation de type. Par exemple, imaginez une méthode générique IEnumerable<T> MakeEnumerable<T>(string spelling, T defaultValue) à laquelle une bibliothèque donnée accède dynamiquement, ainsi qu’aux types List<T> et Array associés. Cela peut être exprimé sous la forme :

<Type Name="MyType">
    <Method Name="MakeEnumerable{T}" Signature="(System.String, T)" Dynamic="Included">
        <ImpliesType Name="T[]" Dynamic="Public" />
        <ImpliesType Name="System.Collections.Generic.List{T}" Dynamic="Public" />
    </Method>
</Type>

Voir aussi