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