<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
Attribut | Attributtyp | Beschreibung |
---|---|---|
Name |
Allgemein | Erforderliches Attribut. Gibt den Eigenschaftennamen an. |
Browse |
Reflexion | Optionales Attribut. Steuert das Abfragen nach Informationen über die Eigenschaft oder das Auflisten der Eigenschaft, aber ermöglicht keinen dynamischen Zugriff zur Laufzeit. |
Dynamic |
Reflexion | 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 Laufzeitanweisungen. |
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 Typ in seinemBook
<Type-Element.>Durch Hinzufügen eines geschachtelten <Property-Elements> für jede Eigenschaft, deren Getter wir aufrufen möchten, wie die folgende default.rd.xml Datei ausgeführt wird.
<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>