Compartilhar via


<Elemento Property (.NET Native)>

Aplica a política de reflexão de runtime a uma propriedade.

Syntax

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

Atributos e elementos

As seções a seguir descrevem atributos, elementos filho e elementos pai.

Atributos

Atributo Tipo de atributo Descrição
Name Geral Atributo obrigatório. Especifica o nome da propriedade.
Browse Reflexão Atributo opcional . Controla consultas para obter informações sobre a propriedade ou para enumerá-la, mas não permite qualquer acesso dinâmico no tempo de execução.
Dynamic Reflexão Atributo opcional . Controla o acesso do runtime à propriedade para habilitar programação dinâmica. Essa política garante que uma propriedade pode ser definida ou recuperada dinamicamente no tempo de execução.
Serialize Serialização Atributo opcional . Controla o acesso do runtime a uma propriedade para habilitar as instâncias de tipo a serem serializadas por bibliotecas como o serializador Newtonsoft JSON ou a ser usado para a associação de dados.

Atributo de nome

Valor Descrição
method_name O nome da propriedade. O tipo da propriedade é definido pelo elemento pai <Type> ou <TypeInstantiation.>

Todos os outros atributos

Valor Descrição
policy_setting A configuração a ser aplicada a este tipo de política para a propriedade. Os valores possíveis são Auto, Excluded, Included e Required. Para obter mais informações, consulte Configurações da política da diretiva de runtime.

Elementos filho

Nenhum.

Elementos pai

Elemento Descrição
<Tipo> Aplica a política de reflexão a um tipo e todos os seus membros.
<TypeInstantiation> Aplica a política de reflexão a um tipo genérico construído e todos os seus membros.

Comentários

Se a política da propriedade não for definida explicitamente, ela herdará a política de runtime do seu elemento pai.

Exemplo

O exemplo a seguir usa reflexão para instanciar um objeto Book e exibir seus valores de propriedade. O arquivo default.rd.xml original para o projeto aparece da seguinte maneira:

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

O arquivo se aplica ao valor All para a política Activate da classe Book, que permite acesso aos construtores de classe por meio de reflexão. A política Browse para a classe Book é herdada do seu namespace pai. Isso é definido para Required Public, que disponibiliza metadados no runtime.

Este é o código-fonte para o exemplo. A outputBlock variável representa um TextBlock controle.

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();
      }
   }
}

No entanto, compilar e executar este exemplo gera uma exceção MissingRuntimeArtifactException. Embora tenhamos disponibilizados metadados para o tipo Book disponível, não realizamos implementações de getters de propriedades disponíveis dinamicamente. Podemos corrigir esse erro de uma das seguintes maneiras:

  • definindo a Dynamic política para o Book tipo em seu <elemento Type> .

  • Adicionando um elemento Property> aninhado <para cada propriedade cujo getter gostaríamos de invocar, como faz o arquivo default.rd.xml a seguir.

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

Confira também