<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 tipoBook
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
- Informazioni di riferimento sul file di configurazione delle direttive di runtime (rd.xml)
- Elementi direttiva di runtime
- Runtime Directive Policy Settings (Impostazioni dei criteri delle direttive di runtime)