Share via


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

Applique la stratégie de réflexion runtime à une propriété.

Syntaxe

<Property Name="property_name"
          Browse="policy_type"
          Dynamic="policy_type"
          Serialize="policy_type" />

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éral Attribut requis. Spécifie le nom de la propriété.
Browse Réflexion Attribut facultatif. Contrôle la demande d'informations sur la propriété ou l'énumération de celle-ci, mais ne permet pas d'effectuer un accès dynamique au moment de l'exécution.
Dynamic Réflexion Attribut facultatif. Contrôle l'accès à la propriété au moment de l'exécution pour autoriser la programmation dynamique. Grâce à cette stratégie, une propriété peut être définie ou récupérée dynamiquement au moment de l'exécution.
Serialize Sérialisation Attribut facultatif. Contrôle l'accès à une propriété au moment de l'exécution pour permettre aux instances de type d'être sérialisées par des bibliothèques, telles que le sérialiseur JSON Newtonsoft, ou d'être utilisées pour la liaison de données.

Name (attribut)

Valeur Description
method_name Nom de la propriété. Le type de la propriété est défini par l’élément Type> ou TypeInstantiation<>parent.<

Tous les autres attributs

Valeur Description
policy_setting Paramètre à appliquer à ce type de stratégie pour la propriété. Les valeurs possibles sont Auto, Excluded, Included et Required. 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.

Remarques

Si la stratégie d'une propriété n'est pas définie explicitement, elle hérite la stratégie runtime de son élément parent.

Exemple

L'exemple suivant utilise la réflexion pour instancier un objet Book et afficher les valeurs de ses propriétés. Le fichier default.rd.xml d'origine du projet se présente comme suit :

<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
   <Application>
      <Namespace Name="LibraryApplications"  Browse="Required Public" >
         <Type Name="Book"   Activate="All" />
      </Namespace>
   </Application>
</Directives>

Le fichier applique la valeur All à la stratégie Activate pour la classe Book, ce qui permet d'accéder aux constructeurs de classe par réflexion. La stratégie Browse pour la classe Book est héritée de son espace de noms parent. Cette option est définie sur Required Public, ce qui rend les métadonnées disponibles au moment de l'exécution.

Voici le code source de l'exemple. La outputBlock variable représente un TextBlock contrôle.

namespace LibraryApplications
{
   public sealed class Example
   {
      public void Execute()
      {
         TextBlock outputBlock = MainPage.outputBlock;
         Type t = typeof(Book);
         Object obj = Activator.CreateInstance(t, new Object[] { "A Tale of 2 Cities", "Charles Dickens", "" });
         outputBlock.Text += "\n\n\n";
         foreach (var p in t.GetRuntimeProperties())
         {
            outputBlock.Text += String.Format("{0}: {1}\n", p.Name, p.GetValue(obj));
         }
      }
   }

   public class Book
   {
      private string bookTitle = "";
      private string bookAuthor = "";
      private string bookISBN = "";

      public Book(string title, string author, string isbn)
      {
         bookTitle = title;
         bookAuthor = author;
         bookISBN = isbn;
      }

      public string Title
      {
         get { return bookTitle; }
         set { bookTitle = value; }
      }

      public string Author
      {
         get { return bookAuthor; }
         set { bookTitle = value; }
      }

      public string ISBN
      {
         get { return bookISBN; }
      }

      public override string ToString()
      {
         return String.Format("{0}, {1}", Author, Title);
      }
   }
}

public class TextUtilities
{
   public static string ConvertNumberToWord(int value)
   {
      switch (value)
      {
         case 1:
            return "One";
         case 2:
            return "Two";
         case 3:
            return "Three";
         case 4:
            return "Four";
         case 5:
            return "Five";
         case 6:
            return "Six";
         case 7:
            return "Seven";
         case 8:
            return "Eight";
         case 9:
            return "Nine";
         default:
            return value.ToString();
      }
   }
}

Cependant, la compilation et l’exécution de cet exemple lèvent une exception MissingRuntimeArtifactException. Bien que les métadonnées soient disponibles pour le type Book, nous n'avons pas pu rendre les implémentations des accesseurs Get de propriété disponibles dynamiquement. Nous pouvons corriger cette erreur de deux manières :

  • en définissant la Dynamic stratégie pour le Book type dans son <élément Type> .

  • En ajoutant un élément Property> imbriqué< pour chaque propriété dont nous aimerions appeler getter, comme le fait le fichier default.rd.xml suivant.

    <Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
       <Application>
          <Namespace Name="LibraryApplications"  Browse="Required Public" >
             <Type Name="Book"   Activate="All" >
                <Property Name="Title" Dynamic="Required" />
                <Property Name="Author" Dynamic="Required" />
                  <Property Name="ISBN" Dynamic="Required" />
             </Type>
          </Namespace>
       </Application>
    </Directives>
    

Voir aussi