<Property-Element> (.NET Native)

Wendet eine Laufzeitreflektionsrichtlinie auf eine Eigenschaft an.

Syntax

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

Attribute und Elemente

In den folgenden Abschnitten werden Attribute sowie untergeordnete und übergeordnete Elemente beschrieben.

Attribute

attribute Attributtyp BESCHREIBUNG
Name Allgemein Erforderliches Attribut. Gibt den Eigenschaftennamen an.
Browse Spiegelung Optionales Attribut. Steuert das Abfragen nach Informationen über die Eigenschaft oder das Auflisten der Eigenschaft, aber ermöglicht keinen dynamischen Zugriff zur Laufzeit.
Dynamic Spiegelung Optionales Attribut. Steuert den Laufzeitzugriff auf die Eigenschaft, um dynamische Programmierung zu ermöglichen. Diese Richtlinie stellt sicher, dass eine Eigenschaft zur Laufzeit dynamisch festgelegt oder abgerufen werden kann.
Serialize Serialisierung Optionales Attribut. Steuert den Laufzeitzugriff auf eine Eigenschaft, damit Typinstanzen von Bibliotheken wie dem Newtonsoft JSON-Serialisierungsprogramm serialisiert werden können oder für die Datenbindung verwendet werden können.

Namensattribut

Wert BESCHREIBUNG
method_name Der Eigenschaftenname. Der Typ der Eigenschaft wird durch das übergeordnete <Type> - oder <TypeInstantiation-Element> definiert.

Alle anderen Attribute

Wert BESCHREIBUNG
policy_setting Die Einstellung, die auf diesen Richtlinientyp für die Eigenschaft angewendet werden soll. Mögliche Werte sind Auto, Excluded, Included und Required. Weitere Informationen finden Sie unter Richtlinieneinstellungen für die Laufzeitanweisung.

Untergeordnete Elemente

Keine

Übergeordnete Elemente

Element BESCHREIBUNG
<Typ> Wendet die Reflektionsrichtlinie auf einen Typ und alle seine Member an.
<TypeInstantiation> Wendet die Reflektionsrichtlinie auf einen konstruierten generischen Typ und alle seine Member an.

Hinweise

Wenn die Richtlinie einer Eigenschaft nicht explizit definiert ist, erbt sie die Laufzeitrichtlinie des übergeordneten Elements.

Beispiel

Im folgenden Beispiel wird Reflektion zum Instanziieren eines Book-Objekts und zum Anzeigen seiner Eigenschaftenwerte verwendet. Die ursprüngliche Datei default.rd.xml für das Projekt sieht folgendermaßen aus:

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

Die Datei wendet den Wert All auf die Activate-Richtlinie für die Book-Klasse an, die den Zugriff auf Klassenkonstruktoren über Reflektion ermöglicht. Die Browse-Richtlinie für die Book-Klasse wird vom übergeordneten Namespace geerbt. Diese wird auf Required Public festgelegt, wodurch Metadaten zur Laufzeit verfügbar werden.

Der Quellcode für das Beispiel lautet wie folgt. Die outputBlock Variable stellt ein TextBlock -Steuerelement dar.

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

Das Kompilieren und Ausführen dieses Beispiels löst jedoch eine MissingRuntimeArtifactException-Ausnahme aus. Obwohl wir Metadaten für den Book-Typ verfügbar gemacht haben, haben wir keine Implementierungen der Eigenschaftengetter dynamisch zur Verfügung gestellt. Wir können diesen Fehler auf eine von zwei Arten beheben:

  • durch Definieren der Dynamic Richtlinie für den Book Typ in seinem <Type-Element> .

  • Durch Hinzufügen eines geschachtelten <Property-Elements> für jede Eigenschaft, deren Getter wir aufrufen möchten, wie in der folgenden default.rd.xml Datei.

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

Siehe auch