<Elemento Property> (.NET Native)

Aplica la directiva de reflexión en tiempo de ejecución a una propiedad.

Sintaxis

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

Atributos y elementos

En las siguientes secciones se describen los atributos, los elementos secundarios y los elementos primarios.

Atributos

Atributo Tipo de atributo Descripción
Name General Atributo necesario. Especifica el nombre de la propiedad.
Browse Reflexión Atributo opcional. Controla la consulta para obtener información acerca de la propiedad o la enumeración de la propiedad, pero no permite el acceso dinámico en tiempo de ejecución.
Dynamic Reflexión Atributo opcional. Controla el acceso en tiempo de ejecución a la propiedad para permitir la programación dinámica. Esta directiva garantiza que una propiedad se puede establecer o recuperar dinámicamente en tiempo de ejecución.
Serialize Serialización Atributo opcional. Controla el acceso en tiempo de ejecución a una propiedad para permitir que bibliotecas como el serializador JSON Newtonsoft puedan serializar instancias de tipo o que estas puedan usarse para enlazar datos.

Name (atributo)

Valor Descripción
method_name Nombre de la propiedad. El tipo de la propiedad se define mediante el <elemento primario Type> o <TypeInstantiation> .

Resto de atributos

Valor Descripción
policy_setting Configuración que se aplica a este tipo de directiva para la propiedad. Los valores posibles son Auto, Excluded, Included y Required. Para obtener más información, vea Runtime Directive Policy Settings (Configuración de directiva de la directiva en tiempo de ejecución).

Elementos secundarios

Ninguno.

Elementos primarios

Elemento Descripción
<Tipo> Aplica la directiva de reflexión a un tipo y a todos sus miembros.
<TypeInstantiation> Aplica la directiva de reflexión a un tipo genérico construido y a todos sus miembros.

Comentarios

Si la directiva de una propiedad no está definida explícitamente, hereda la directiva en tiempo de ejecución de su elemento primario.

Ejemplo

En el siguiente ejemplo se usa la reflexión para crear instancias de un objeto Book y mostrar sus valores de propiedad. El archivo default.rd.xml original del proyecto se muestra así:

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

El archivo se aplica el valor All a la directiva Activate de la clase Book, lo que permite el acceso a los constructores de clase mediante reflexión. La directiva Browse para la Book clase se hereda de su espacio de nombres primario. Esto se establece en Required Public, que hace que los metadatos estén disponibles en tiempo de ejecución.

A continuación se muestra el código fuente del ejemplo. La outputBlock variable representa un TextBlock control .

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

Sin embargo, compilar y ejecutar este ejemplo genera una excepción MissingRuntimeArtifactException. Aunque hemos puesto a disposición los metadatos correspondientes a Book, no hemos podido llevar a cabo las implementaciones de los captadores de propiedades disponibles dinámicamente. Podemos corregir este error mediante una de estas dos maneras:

  • definiendo la Dynamic directiva para el Book tipo en su <elemento Type> .

  • Al agregar un elemento Property> anidado< para cada propiedad cuyo captador nos gustaría invocar, como hace el siguiente archivo 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>
    

Vea también