次の方法で共有


<Property> 要素 (.NET ネイティブ)

プロパティにランタイム リフレクション ポリシーを適用します。

構文

<Property Name="property_name"
          Browse="policy_type"
          Dynamic="policy_type"
          Serialize="policy_type" />

属性および要素

以降のセクションでは、属性、子要素、および親要素について説明します。

属性

属性 属性の型 説明
Name 全般 必須の属性です。 プロパティ名を指定します。
Browse リフレクション 省略可能な属性です。 プロパティに関する情報の照会やプロパティの列挙を制御しますが、実行時の動的アクセスは有効にしません。
Dynamic リフレクション 省略可能な属性です。 プロパティへの実行時アクセスを制御して、動的プログラミングを有効にします。 このポリシーによって、実行時にプロパティを動的に設定または取得できるようになります。
Serialize シリアル化 省略可能な属性です。 プロパティへの実行時アクセスを制御して、型インスタンスを Newtonsoft の JSON シリアライザーなどのライブラリによってシリアル化できるようにしたり、データ バインディングで使用できるようにしたりします。

Name 属性

[値] 説明
method_name プロパティ名。 このプロパティの型は、親 <Type> または <TypeInstantiation> 要素によって定義されます。

その他すべての属性

[値] 説明
policy_setting プロパティのこのポリシーの種類に適用する設定です。 指定できる値は、AutoExcludedIncluded、および 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 の実装は動的に使用可能になりませんでした。 このエラーは、次の 2 つの方法のいずれかを使用して修正できます。

  • Book 型の Dynamic ポリシーを <Type> 要素で定義する。

  • 次の default.rd.xml ファイルで行われているように、呼び出したいゲッターを持つ各プロパティに対して、入れ子になった <Property> 要素を追加する。

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

関連項目