Latest web development tutorials

Propriedades C # (atributo)

Características (Atributo) é um programa de transferência de vários elementos (tais como classes, métodos, estruturas, enumerações, componentes, etc.) no comportamento de tempo de execução de informações tag declarativa.Você pode adicionar informações declarativa para o programa usando o recurso. Uma etiqueta de indicação é aplicada, colocando-o em frente dos elementos entre parêntesis rectos ([]) para descrever.

Características (atributos) para adicionar metadados, como instruções do compilador e comentários, descrição, métodos, informações adicionais e assim por diante. .Net Framework fornece dois tipos de recursos: propriedadespredefinidase propriedadespersonalizadas.

propriedades predeterminadas (atributo)

propriedades predeterminadas (atributo) a seguinte sintaxe:

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

Características (atributo) nomes e valores são especificados dentro de colchetes, colocado antes do elemento ao qual se aplica. positional_parameters predeterminado informações necessárias, name_parameter predeterminado informações opcionais.

atributos predefinidos (atributo)

.Net Framework fornece três atributos predefinidos:

  • AttributeUsage
  • condicional
  • obsoleto

AttributeUsage

atributos predefinidosAttributeUsage descreve como usar uma classe atributo personalizado.Especifica o tipo de propriedades podem ser aplicadas ao projecto.

Disposições do presente recurso tem a seguinte sintaxe:

[AttributeUsage (
   validon,
   AllowMultiple = AllowMultiple,
   = Herdadas herdada
)]

em que:

  • Validon parâmetros característicos elementos de linguagem podem ser colocados predeterminado. É uma combinação de valor enumeratorsAttributeTargets.O valor padrão éAttributeTargets.All.
  • AllowMultipleparâmetro(opcional)fornece um valor booleano para a propriedadeAllowMultiple(propriedade). Se for verdade, então este recurso é mais útil. O valor padrão é false (uso individual).
  • Parâmetrosherdados (opcional)fornece um valor booleano para a propriedadeHerdado(propriedade). Se for verdade, esta propriedade é uma classe derivada pode ser herdada. O valor padrão é false (não herdado).

Por exemplo:

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

condicional

Esta função marca um método condição pré-definida, sua implementação depende de seu identificador de pré-processamento superior.

Ele fará com que a compilação condicional de chamadas de métodos, dependendo do valor especificado, como adepuração ou rastreamento.Por exemplo, o valor da variável é exibido quando a depuração do código.

Disposições do presente recurso tem a seguinte sintaxe:

[Condicional (
   conditionalSymbol
)]

Por exemplo:

[Conditional ( "DEBUG")]

O exemplo a seguir demonstra esse recurso:

DEBUG #define
using System;
using System.Diagnostics;
Public class MyClass
{
    [Conditional ( "DEBUG")]
    public void mensagem estática (String msg)
    {
        Console.WriteLine (msg);
    }
}
Teste de classe
{
    function1 static void ()
    {
        Myclass.Message ( "In Função 1.");
        function2 ();
    }
    function2 static void ()
    {
        Myclass.Message ( "In Function 2");
    }
    public static void Main ()
    {
        Myclass.Message ( "Em função principal.");
        function1 ();
        Console.ReadKey ();
    }
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

Em função principal
Em função 1
Em função 2

obsoleto

Os atributos predefinidos tag entidades de programas não devem ser usados. Ele permite que você para dizer ao compilador para descartar um elemento de destino particular. Por exemplo, quando um novo método é usado em uma classe, mas você ainda quiser manter a classe no método antigo, você pode exibir um novo método deve ser usado em vez do velho método de mensagem para marcá-lo como obsoleta (antiquada a).

Disposições do presente recurso tem a seguinte sintaxe:

[Obsoleto (
   mensagem
)]
[Obsoleto (
   mensagem,
   iserror
)]

em que:

  • mensagem do parâmetro,é uma cadeia que descreve o projecto, bem como as razões pelas quais o ultrapassado o que os usos alternativos.
  • Parâmetrosiserror,é um valor booleano. Se for verdade, o compilador deve usar o projeto como um erro. O valor padrão é false (o compilador gera um aviso).

O exemplo a seguir demonstra esse recurso:

using System;
Public class MyClass
{
   [Obsoleto ( "Não use OldMethod, use NewMethod vez", true)]
   static void OldMethod ()
   { 
      Console.WriteLine ( "É o velho método");
   }
   NewMethod static void ()
   { 
      Console.WriteLine ( "É o novo método"); 
   }
   public static void Main ()
   {
      OldMethod ();
   }
}

Quando você tenta compilar o programa, o compilador dará uma mensagem de erro informando:

 Não use OldMethod, use NewMethod vez

Criar atributos personalizados (atributo)

.Net Framework permite criar propriedades personalizadas para armazenar informações declarativo, e pode ser recuperado em tempo de execução. Esta informação é baseada em critérios de projeto e o aplicativo precisa ser associado a qualquer elemento de destino.

Criar e usar recursos personalizados incluem quatro etapas:

  • Propriedades declaração personalizadas
  • Criar propriedades personalizadas
  • Aplicar propriedades personalizadas no elemento de programa de destino
  • Acesso através de características de reflexão

A etapa final inclui escrever um programa simples para ler os metadados para encontrar os vários símbolos. Metadados são dados e informações utilizado para descrever outros dados. O programa deve usar o reflexo para acessar as propriedades em tempo de execução. Vamos discutir isso em detalhes no próximo capítulo.

Propriedades declaração personalizadas

Uma nova propriedades personalizadas a ser derivada da classeSystem.Attribute.Por exemplo:

// BugFix um atributo personalizado é atribuído à classe e seus membros [AttributeUsage (AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

DebugInfo classe pública: System.Attribute

No código acima, temos declarado um atributo personalizado chamadoDebugInfode.

Criar propriedades personalizadas

Vamos construir um atributo personalizado chamadoDebugInfo,as informações serão armazenadas no depurador recurso obtido. Ele armazena as seguintes informações:

  • número do código de erro
  • Desenvolvedores reconhecer o nome do bug
  • Data da última revisão do código
  • A desenvolvedores de armazenamento de mensagens cadeia marcar

NossosDebugInfoprimeiros três classes serão usados para armazenar três informação privada de propriedade (property) e com uma propriedade pública para armazenar mensagens para (propriedade). posicionamento Então será necessário números de bug nome do desenvolvedor e a data da revisão classe DebugInfo parâmetro (posicional), a mensagem é um nome opcional (nomeados) parâmetros.

Cada propriedade deve ter pelo menos um construtor. posicionamento exigido parâmetro (posicional), que deve ser passada pelo construtor. O código a seguir demonstra categoriasDebugInfo:

// BugFix um atributo personalizado é atribuído à classe e seus membros [AttributeUsage (AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

DebugInfo classe pública: System.Attribute
{
  Bugno int privado;
  desenvolvedor cadeia privada;
  lastReview cadeia privada;
  string mensagem pública;

  pública DebugInfo (bg int, dev fio, fio d)
  {
      this.bugNo = bg;
      this.developer = dev;
      this.lastReview = d;
  }

  Bugno int pública
  {
      obter
      {
          voltar Bugno;
      }
  }
  Desenvolvedor cadeia pública
  {
      obter
      {
          voltar desenvolvedor;
      }
  }
  Cadeia pública LastReview
  {
      obter
      {
          voltar lastReview;
      }
  }
  Mensagem cadeia pública
  {
      obter
      {
          retornar mensagem;
      }
      conjunto
      {
          mensagem = value;
      }
  }
}

Aplicar propriedades personalizadas

Ao colocar propriedades imediatamente antes do seu destino para aplicar esse recurso:

[DebugInfo (45, "Zara Ali", "2012/12/08", Message = "Return incompatibilidade de tipo")]
[DebugInfo (49, "Nuha Ali", "2012/10/10", Message = "variável não utilizada")]
classe Retângulo
{
  // Variáveis ​​membro protegido comprimento duplo;
  protegidas largura dupla;
  Retângulo pública (duplo l, dupla w)
  {
      comprimento = L;
      largura W =;
  }
  [DebugInfo (55, "Zara Ali", "19/10/2012",
  Message = "incompatibilidade de tipo Return")]
  GetArea public double ()
  {
      retornar comprimento * largura;
  }
  [DebugInfo (56, "Zara Ali", "19/10/2012")]
  Exibição public void ()
  {
      Console.WriteLine ( "Duração: {0}", comprimento);
      Console.WriteLine ( "Largura: {0}", largura);
      Console.WriteLine ( "Área: {0}", GetArea ());
  }
}

No próximo capítulo, vamos usar o objeto de classe Reflection para recuperar essas informações.