Поделиться через


<Элемент Property> (.NET Native)

Применяет политику отражения среды выполнения к свойству.

Синтаксис

<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 доступными, нам не удалось обеспечить динамический доступ к реализациям свойств считывания. Эту ошибку можно исправить одним из двух способов:

  • путем определения 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>
    

См. также раздел