O melhor tutorial Propriedades C # (atributo) em 2024. Neste tutorial você pode aprender propriedades predeterminadas (atributo),atributos predefinidos (atributo),Criar atributos personalizados (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) a seguinte sintaxe:
[Atributo (positional_parameters, name_parameter = value, pt.)] 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.
.Net Framework fornece três atributos predefinidos:
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:
Por exemplo:
[AttributeUsage (AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)]
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
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:
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
.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:
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.
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.
Vamos construir um atributo personalizado chamadoDebugInfo,as informações serão armazenadas no depurador recurso obtido. Ele armazena as seguintes informações:
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; } } }
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.