<Property> 項目 (.NET Native)
將執行階段反映原則套用至屬性。
語法
<Property Name="property_name"
Browse="policy_type"
Dynamic="policy_type"
Serialize="policy_type" />
屬性和項目
下列章節說明屬性、子元素和父元素。
屬性
屬性 | 屬性類型 | 描述 |
---|---|---|
Name |
一般 | 必要的 屬性。 指定屬性名稱。 |
Browse |
反映 | 選用屬性。 控制對屬性相關資訊的查詢,或控制屬性的列舉,但不會在執行階段啟用任何動態存取。 |
Dynamic |
反映 | 選用屬性。 控制對屬性的執行階段存取權,以啟用動態程式設計。 此原則可確保能夠在執行階段動態設定或擷取屬性。 |
Serialize |
序列化 | 選用屬性。 控制對屬性的執行階段存取權,使類型執行個體能夠由 Newtonsoft JSON 序列化程式之類的程式庫來序列化,或是用於資料繫結。 |
Name 屬性
值 | Description |
---|---|
method_name | 屬性名稱。 屬性的類型是由父 <Type> 或 <TypeInstantiation> 項目所定義。 |
所有其他屬性
值 | Description |
---|---|
policy_setting | 要為屬性套用此原則類型的設定。 可能的值為 Auto 、Excluded 、Included 和 Required 。 如需詳細資訊,請參閱執行階段指示詞原則設定。 |
子元素
無。
父項目
元素 | 描述 |
---|---|
<類型> | 將反映原則套用至類型及其所有成員。 |
<TypeInstantiation> | 將反映原則套用至建構泛型類型及其所有成員。 |
備註
如果未明確定義屬性的原則,則會繼承其父元素的執行階段原則。
範例
下列範例會使用反映來具現化 Book
物件,並顯示其屬性值。 專案的原始 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" />
</Namespace>
</Application>
</Directives>
檔案會針對 All
類別,將 Activate
值套用至 Book
原則,如此可允許透過反映來存取類別建構函式。 Browse
類別的 Book
原則繼承自其父命名空間。 其設定為 Required Public
,讓中繼資料在執行階段可供使用。
以下是範例的原始程式碼。 outputBlock
變數代表 TextBlock 控制項。
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();
}
}
}
不過,編譯和執行此範例會擲回 MissingRuntimeArtifactException 例外狀況。 雖然我們已經讓 Book
類型的中繼資料可供使用,但我們無法讓屬性 getter 的實作供動態使用。 我們可以用下列兩種方法之一來更正這個錯誤:
在其 <Type> 項目中為
Book
類型定義Dynamic
原則。針對我們要叫用其 getter 的每個屬性,新增巢狀 <Property> 項目,如下列 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>