共用方式為


<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 要為屬性套用此原則類型的設定。 可能的值為 AutoExcludedIncludedRequired。 如需詳細資訊,請參閱執行階段指示詞原則設定

子元素

無。

父項目

元素 描述
<類型> 將反映原則套用至類型及其所有成員。
<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>
    

另請參閱