Condividi tramite


<Elemento Property> (.NET Native)

Applica i criteri di reflection di runtime a una proprietà.

Sintassi

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

Attributi ed elementi

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

Attributi

Attributo Tipo di attributo Descrizione
Name Generali Attributo obbligatorio. Specifica il nome della proprietà.
Browse Reflection Attributo facoltativo. Controlla le query per le informazioni o per l'enumerazione della proprietà, ma non abilita l'accesso dinamico al runtime.
Dynamic Reflection Attributo facoltativo. Controlla l'accesso in fase di esecuzione alla proprietà per abilitare la programmazione dinamica. Questo criterio assicura che una proprietà può essere impostata o recuperata dinamicamente in fase di esecuzione.
Serialize Serializzazione Attributo facoltativo. Controlla l'accesso in fase di esecuzione a una proprietà per abilitare le istanze di tipo da serializzare in librerie quali il serializzatore JSON Newtonsoft o da usare per il data binding.

Name (attributo)

valore Descrizione
method_name Nome della proprietà. Il tipo di proprietà viene definito dall'elemento padre <Type> o <TypeInstantiation> element.

Tutti gli altri attributi

valore Descrizione
policy_setting L'impostazione da applicare a questo tipo di criteri per la proprietà. I valori consentiti sono Auto, Excluded, Included e Required. 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.
<TypeInstantiation> Applica i criteri di reflection a un tipo generico costruito e a tutti i membri.

Osservazioni:

Se i criteri di una proprietà non sono definiti esplicitamente, la proprietà eredita i criteri di runtime dell'elemento padre.

Esempio

Nell'esempio seguente si usa la reflection per creare un'istanza di un oggetto Book e visualizzare i valori delle proprietà. Il file originale default.rd.xml per il progetto viene visualizzato come segue:

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

Il file applica il valore All ai criteri Activate per la classe Book, che consente di accedere ai costruttori della classe tramite la reflection. I criteri Browse per la classe Book vengono ereditati dal relativo spazio dei nomi padre. Questa proprietà è impostata su Required Public, che rende disponibili i metadati in fase di esecuzione.

Di seguito viene riportato il codice sorgente per l'esempio. La variabile outputBlock rappresenta TextBlock un controllo.

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

Tuttavia, la compilazione e l'esecuzione di questo esempio genera un'eccezione MissingRuntimeArtifactException. Anche se i metadati per il tipo Book sono stati resi disponibili, non è stato possibile rendere disponibili le implementazioni di funzioni Get di proprietà in modo dinamico. È possibile correggere l'errore in uno di due modi:

  • Definendo i criteri Dynamic per il tipo Book nel relativo elemento <Type>.

  • Aggiungendo un elemento <Property> annidato per ogni proprietà per cui si intende richiamare il getter, come nel seguente file default.rd.xml.

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

Vedi anche