O artigo demonstra os atributos do .NET Framework e suas principais utilizações dentro da linguagem C# e seus projetos. Também mostra como criar e ler atributos customizados passando pelas principais formas de se aplicar estes em diversos tipos de aplicações.
Em que situação o tema é útil
Atributos servem para fornecer metadados sobre os elementos do código e, dependendo da maneira como são definidos, alterar o comportamento da aplicação. Os atributos são constantemente usados em conjunto com técnicas de Reflection, para obter dados do aplicativo durante o runtime. Os atributos ajudam em diversas tarefas que vão desde informações adicionais sobre um elemento do programa (classes, propriedades e métodos), alteração do comportamento da serialização XML de uma classe, definição de classes para testes unitários, etc. Os atributos podem diminuir a complexidade do código gerado ou, pelo menos, dar mais flexibilidade ao mesmo.
Utilizando atributos com C#
Atributos acrescentam dados sobre elementos da linguagem de programação quer sejam classes, propriedades, assembly etc. Podem ser usados para documentar ou fornecer metadados para serem recuperados via Reflection e a partir dos dados que forem recuperados, alterar ou não o funcionamento do assembly.
Em muitos casos também podem ser usados para especificar tipos especiais de classes e métodos como os que são usados por Webservices e testes unitários.
Outro exemplo de uso dos atributos para afetar o funcionamento do código é quando atributos são usados para customizar a geração de documentos XML através da serialização de classes no Framework.
Estes e outros conceitos e exemplos serão dados neste artigo que também mostra uma utilização bem particular com o MVC.
Os atributos na linguagem C# e no .NET Framework são uma maneira de se acrescentar dados sobre um assembly (executável ou class library), uma classe, um método e outros elementos da linguagem, de uma maneira declarativa, ou seja, diretamente no código. Entre os muitos dados que podem ser acrescentados estão URLs relacionadas com o projeto, tópicos de documentação. Também são acrescentadas informações auto descritivas de componentes e também dados para serem recuperados via reflection durante a execução.
Entre as utilizações mais tradicionais da utilização dos atributos estão:
· Informações sobre o assembly;
· Informações sobre classes e métodos;
· Serialização;
· Atribuição de permissões de segurança;
· Identificação de tipos especiais de classes e métodos;
· Definição de constraints para propriedades usadas em classes para armazenamento de dados.
Os atributos são de vários tipos. Um uso bem típico é a definição dos dados do assembly. Observe a Listagem 1 que mostra os atributos padrão gerados pelo Visual Studio.
Listagem 1. Atributos de Assembly
1 using System.Reflection;
2 using System.Runtime.CompilerServices;
3 using System.Runtime.InteropServices;
4
5 // General Information about an assembly is controlled through the following
6 // set of attributes. Change these attribute values to modify the information
7 // associated with an assembly.
8 [assembly: AssemblyTitle("dynamicDemoData")]
9 [assembly: AssemblyDescription("")]
10 [assembly: AssemblyConfiguration("")]
11 [assembly: AssemblyCompany("")]
12 [assembly: AssemblyProduct("dynamicDemoData")]
13 [assembly: AssemblyCopyright("Copyright © 2011")]
14 [assembly: AssemblyTrademark("")]
15 [assembly: AssemblyCulture("")]
16
17 // Setting ComVisible to false makes the types in this assembly not visible
18 // to COM components. If you need to access a type in this assembly from
19 // COM, set the ComVisible attribute to true on that type.
20 [assembly: ComVisible(false)]
21
22 // The following GUID is for the ID of the typelib if this project is exposed to COM
23 [assembly: Guid("c815295a-4ac0-483f-908d-4fb50d2a0856")]
24
25 // Version information for an assembly consists of the following four values:
26 //
27 // Major Version
28 // Minor Version
29 // Build Number
30 // Revision
31 //
32 // You can specify all the values or you can default the Build and Revision Numbers
33 // by using the '*' as shown below:
34 // [assembly: AssemblyVersion("1.0.*")]
35 [assembly: AssemblyVersion("1.0.0.0")]
36 [assembly: AssemblyFileVersion("1.0.0.0")]
Essa listagem corresponde ao arquivo AssemblyInfo.cs que pode ser encontrado nos projetos do Visual Studio na pasta Properties. Os dados deste arquivo oferecem informações sobre o executável e tanto podem ser editadas manualmente como também alteradas via editor de propriedades do projeto (menu Project > Properties do Visual Studio).
No C# a sintaxe básica pra os atributos é colocar estes entre colchetes sobre o elemento que se deseja definir os valores. Um atributo pode ser simples, como por exemplo, o atributo que define uma classe como passível de serialização:
[Serializable]
public class foo
{
...
}
...