csharp-atributos

Cómo usar atributos en C#

  • 3 min

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.