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

另請參閱