Los atributos en C# son clases especiales que se utilizan para agregar metadatos a los elementos de código.
Estos metadatos pueden ser leídos y utilizados por el compilador, herramientas de desarrollo o el propio programa en tiempo de ejecución mediante reflexión.
Los atributos se derivan de la clase base System.Attribute.
Estos metadatos proporcionan información adicional sobre los elementos del programa, como clases, métodos, propiedades, entre otros
Sintaxis de los atributos
Un atributo se declara colocando el nombre del atributo entre corchetes ([ ]) justo antes de la declaración del elemento al que se aplica. Por ejemplo:
[Serializable]
public class Ejemplo { }
[Obsolete("Este método está obsoleto")]
public void MetodoAntiguo() { }
En estos ejemplos, Serializable y Obsolete son atributos que proporcionan información adicional sobre la clase Ejemplo y el método MetodoAntiguo, respectivamente.
Uso de atributos predefinidos
Existen muchos atributos predefinidos en el .NET. Vamos a ver algunos de ellos.
Definición y uso de atributos personalizados
Además de usar atributos personalizados, también es posible definir atributos personalizados según las necesidades específicas del desarrollador.
Para definir un atributo personalizado, se crea una clase que derive de System.Attribute y se añade cualquier propiedad o campo necesario.
Definición de un atributo personalizado
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class AutorAttribute : Attribute
{
public string Nombre { get; }
public string Fecha { get; }
public AutorAttribute(string nombre, string fecha)
{
Nombre = nombre;
Fecha = fecha;
}
}
En este ejemplo, se define un atributo personalizado AutorAttribute con dos propiedades: Nombre y Fecha.
Uso de un atributo personalizado
[Autor("Luis", "01/06/2023")]
public class Ejemplo
{
[Autor("Luis", "01/06/2023")]
public void MetodoEjemplo()
{
// Código del método
}
}
Aquí, el atributo Autor se aplica tanto a la clase Ejemplo como al método MetodoEjemplo, proporcionando información sobre el autor y la fecha.
Lectura de atributos en tiempo de ejecución
La reflexión en C# permite leer los atributos aplicados a los elementos de código en tiempo de ejecución. Esto se hace utilizando las clases del espacio de nombres System.Reflection.
Type tipo = typeof(Ejemplo);
foreach (var atributo in tipo.GetCustomAttributes(typeof(AutorAttribute), false))
{
AutorAttribute autor = (AutorAttribute)atributo;
Console.WriteLine($"Clase - Autor: {autor.Nombre}, Fecha: {autor.Fecha}");
}
MethodInfo metodo = tipo.GetMethod("MetodoEjemplo");
foreach (var atributo in metodo.GetCustomAttributes(typeof(AutorAttribute), false))
{
AutorAttribute autor = (AutorAttribute)atributo;
Console.WriteLine($"Método - Autor: {autor.Nombre}, Fecha: {autor.Fecha}");
}
En este ejemplo, se leen y muestran los atributos Autor aplicados a la clase Ejemplo y al método MetodoEjemplo.
