<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 | プロパティのこのポリシーの種類に適用する設定です。 指定できる値は、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 の実装は動的に使用可能になりませんでした。 このエラーは、次の 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>