Latest web development tutorials

propiedades de C # (atributo)

Características (Atributo) es un programa para la transferencia de varios elementos (tales como clases, métodos, estructuras, enumeraciones, componentes, etc.) en el comportamiento en tiempo de ejecución de la información de la etiqueta declarativa.Se puede añadir información declarativa al programa mediante el uso de la función. Una etiqueta de declaración se aplica colocando en frente de los elementos entre corchetes ([]) para describir.

Características (atributo) para añadir metadatos, tales como instrucciones de compilación y comentarios, la descripción, los métodos, información adicional y así sucesivamente. .Net Framework proporciona dos tipos de funciones: propiedadespredefinidasy propiedadespersonalizadas.

propiedades predeterminadas (atributo)

propiedades predeterminadas (atributo) la siguiente sintaxis:

[Atributo (positional_parameters, name_parameter = valor, ...)]
elemento

Características (atributo) nombres y valores se especifican entre corchetes, colocado antes del elemento al que se aplica. positional_parameters predeterminados información necesaria, name_parameter predeterminados información opcional.

atributos predefinidos (atributo)

.Net Framework proporciona tres atributos predefinidos:

  • AttributeUsage
  • condicional
  • obsoleto

AttributeUsage

Predefinida atributosAttributeUsage describe cómo utilizar una clase de atributo personalizado.Se especifica el tipo de propiedades se puede aplicar al proyecto.

Disposiciones de esta función tiene la siguiente sintaxis:

[AttributeUsage (
   validon,
   AllowMultiple = allowMultiple,
   = Heredados heredaron
)]

en la que:

  • Validon predeterminado parámetros característicos elementos del lenguaje puede ser colocado. Es una combinación de valor enumeradoresAttributeTargets.El valor por defecto esAttributeTargets.All.
  • allowMultipleparámetro(opcional)proporciona un valor booleano para la propiedadallowMultiplepropiedad (propiedad). Si es verdad, entonces esta característica es más útil. El valor predeterminado es falso (un solo uso).
  • Parámetrosheredados (opcional)proporciona un valor booleano para la propiedadheredala propiedad (propiedad). Si es verdad, esta propiedad es una clase derivada puede ser heredada. El valor predeterminado es falso (no hereditaria).

Por ejemplo:

[AttributeUsage (AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property, 
AllowMultiple = true)]

condicional

Esta característica marca un método condición predefinida, su aplicación depende de su parte superior identificador de preprocesamiento.

Esto causará que la compilación condicional de llamadas a métodos, dependiendo del valor especificado comode depuración o de seguimiento.Por ejemplo, el valor de la variable se visualiza cuando la depuración del código.

Disposiciones de esta función tiene la siguiente sintaxis:

[Condicional (
   conditionalSymbol
)]

Por ejemplo:

[Condicional ( "Test")]

El siguiente ejemplo muestra esta característica:

#define DEBUG
using System;
using System.Diagnostics;
Public class MiClase
{
    [Condicional ( "Test")]
    public void mensaje (msg cadena)
    {
        Console.WriteLine (msg);
    }
}
clase Test
{
    function1 static void ()
    {
        Myclass.Message ( "En función 1.");
        function2 ();
    }
    function2 static void ()
    {
        Myclass.Message ( "En función 2.");
    }
    public static void Principal ()
    {
        Myclass.Message ( "En la función principal.");
        function1 ();
        Console.ReadKey ();
    }
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

En función principal
En función 1
En función 2

obsoleto

Los atributos predefinidos etiquetados entidades de programas no deben ser utilizados. Es decir, podrá determinar el compilador de desprenderse de un elemento objetivo en particular. Por ejemplo, cuando se utiliza un nuevo método en una clase, pero que todavía quieren mantener a la clase en el método antiguo, puede mostrar un nuevo método debe utilizarse en lugar del viejo método de mensaje para marcarlo como obsoleto (obsoleto a).

Disposiciones de esta función tiene la siguiente sintaxis:

[Obsoleta (
   mensaje
)]
[Obsoleta (
   mensaje,
   ESERROR
)]

en la que:

  • mensaje de parámetros,es una cadena que describe el proyecto, así como las razones por las que lo obsoleto utiliza la alternativa.
  • ParámetrosESERROR,es un valor booleano. Si es verdad, el compilador debe utilizar el proyecto como un error. El valor predeterminado es falso (el compilador genera una advertencia).

El siguiente ejemplo muestra esta característica:

using System;
Public class MiClase
{
   [Obsoleta ( "No utilice OldMethod, utilice newMethod lugar", true)]
   OldMethod static void ()
   { 
      Console.WriteLine ( "Es el viejo método");
   }
   NewMethod static void ()
   { 
      Console.WriteLine ( "Es el nuevo método"); 
   }
   public static void Principal ()
   {
      OldMethod ();
   }
}

Cuando intenta compilar el programa, el compilador dará un mensaje de error que indica:

 No utilice OldMethod, utilice en su lugar newMethod

Crear atributos personalizados (atributo)

Net Framework permite crear propiedades personalizadas para almacenar información declarativa, y se pueden recuperar en tiempo de ejecución. Esta información se basa en los criterios de diseño y la aplicación tiene que estar asociado con cualquier elemento de destino.

Creación y uso de características personalizadas incluyen cuatro pasos:

  • Propiedades comunicado personalizados
  • Construir Propiedades personalizadas
  • Aplicar las propiedades personalizadas en el elemento de programa de destino
  • Acceso a través de características de reflexión

El paso final incluye escribir un programa simple para leer los metadatos para encontrar los distintos símbolos. Los metadatos son datos y la información utilizada para describir otros datos. El programa debe utilizar la reflexión para acceder a las propiedades en tiempo de ejecución. Vamos a discutir esto en detalle en el siguiente capítulo.

Propiedades comunicado personalizados

Una nueva propiedad personalizada que se derivan de la claseSystem.Attribute.Por ejemplo:

// Arreglado un atributo personalizado se asigna a la clase y sus miembros [AttributeUsage (AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

Debuginfo clase pública: System.Attribute

En el código anterior, hemos declarado un atributo personalizado denominadodebuginfode.

Construir Propiedades personalizadas

Vamos a construir un atributo personalizado denominadodebuginfo,la información se almacena en el depurador característica obtenida. Se almacena la siguiente información:

  • número de código de error
  • Los desarrolladores reconocen el nombre del insecto
  • Fecha de la última revisión del código
  • A los desarrolladores de almacén de mensajes de cadena marcan

Nuestrosdebuginfoprimeros tres clases se pueden utilizar para almacenar información privada de tres propiedad (propiedad) y con una propiedad pública para almacenar mensajes para (propiedad). posicionamiento modo que no necesitará los números de errores nombre del desarrollador y la fecha de la revisión de clase debuginfo (posicional) parámetro, el mensaje es un nombre opcional (con nombre) parámetros.

Cada propiedad debe tener al menos un constructor. posicionamiento requerido (posicional) parámetro que debe ser aprobada por el constructor. El código siguiente muestra las categoríasdebuginfo:

// Arreglado un atributo personalizado se asigna a la clase y sus miembros [AttributeUsage (AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

Debuginfo clase pública: System.Attribute
{
  Bugno int privado;
  desarrollador cadena privada;
  lastReview cadena privada;
  mensaje de cadena pública;

  debuginfo pública (int bg, dev cadena, cadena d)
  {
      this.bugNo = BG;
      this.developer = dev;
      this.lastReview = d;
  }

  public int BUGNO
  {
      obtener
      {
          volver BUGNO;
      }
  }
  public String desarrollador
  {
      obtener
      {
          desarrollador de retorno;
      }
  }
  cadena pública LastReview
  {
      obtener
      {
          volver lastReview;
      }
  }
  public String Mensaje
  {
      obtener
      {
          mensaje de retorno;
      }
      conjunto
      {
          message = valor;
      }
  }
}

Aplicar las propiedades personalizadas

Mediante la colocación de propiedades inmediatamente antes de su objetivo de aplicar esta función:

[Debuginfo (45, "Zara Ali", "08/12/2012", mensaje = "El retorno de coincidencia de tipos")]
[Debuginfo (49, "Nuha Ali", "10/10/2012", Mensaje = "variables no utilizada")]
clase Rectangle
{
  // Variables de miembro protegido de doble longitud;
  protegida de doble ancho;
  Rectángulo pública (doble L, doble w)
  {
      longitud = l;
      width = w;
  }
  [Debuginfo (55, "Zara Ali", "19/10/2012",
  Message = "El retorno de coincidencia de tipos")]
  GetArea doble pública ()
  {
      volver longitud * anchura;
  }
  [Debuginfo (56, "Zara Ali", "19/10/2012")]
  Pantalla public void ()
  {
      Console.WriteLine ( "Longitud: {0}", longitud);
      Console.WriteLine ( "Ancho: {0}", ancho);
      Console.WriteLine ( "Área: {0}", getArea ());
  }
}

En el siguiente capítulo, utilizaremos la clase de objeto de reflexión para recuperar esta información.