<Элемент Property (.NET Native)>
Применяет политику отражения среды выполнения к свойству.
Синтаксис
<Property Name="property_name"
Browse="policy_type"
Dynamic="policy_type"
Serialize="policy_type" />
Атрибуты и элементы
В следующих разделах описаны атрибуты, дочерние и родительские элементы.
Атрибуты
Атрибут | Тип атрибута | Description |
---|---|---|
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
доступными, нам не удалось обеспечить динамический доступ к реализациям свойств считывания. Эту ошибку можно исправить одним из двух способов:
определив
Dynamic
политику дляBook
типа в элементе< Type>.Добавив вложенный <элемент 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>