Saltar al contenido

Propósito de los atributos comunes predefinidos en C#

Hay muchos lugares en tu código donde puedes definir atributos como ensamblajes, métodos y tipos, y la lista continúa. Una vez que asocies el atributo con una parte seleccionada del código, tendrás la opción de consultarlo con una técnica llamada Reflection. En el marco .NET, cada tipo y componente, como los ensamblajes y las clases, tienen sus propios metadatos definidos de forma predeterminada, que se pueden ampliar con información de metadatos personalizada según se desee. Cuando permite la información de metadatos, tiene la opción de elegir el ámbito; puede aplicarla a ensamblajes completos o sólo a partes específicas de su código.

Por último, lo más especial de los metadatos es que tu propia aplicación puede inspeccionar sus propios metadatos y los de otro programa. Esto te permite incorporar la comprobación de compatibilidad y otras características interesantes.

Propósito de los atributos comunes predefinidos en C#
Propósito de los atributos comunes predefinidos en C#

Hay un código de esqueleto que puede ser usado como plantilla cuando se trabaja con atributos:

1[atributo( parámetros_de_posición , nombre_parámetro =valor, ... )] elemento

csharp

Los atributos predeterminados siguen una convención de nombres que dice que debes ponerle el sufijo a tu atributo personalizado con Attribute. En la práctica, esto significa que cuando usted tiene un atributo llamado DllImport este apunta realmente al Atributo DllImport en la Librería .NET. Si usted define sus propios atributos personalizados debe seguir este concepto.

Digamos que tienes el siguiente código, que representa una máquina servidor. Tiene dos funciones: una para reiniciar la máquina y otra para instalar las últimas actualizaciones.

12345678publicclassServer{privatestring _name;publicstring Name {get=> _name;set=> _name =value;}publicServer(string name){ Name = name;}publicvoidUpdateServer(){ Console. WriteLine($"Descarga e instalación de actualizaciones en el servidor: {Nombre}!");}publicvoidRestatServer(){ Consola. WriteLine($"Reiniciando el servidor con gracia: {Nombre}";}}

csharp

A medida que el proyecto evoluciona, puede que quieras añadir una función extra que va a desaprobar el UpdateServer() y manejar tanto la instalación de actualización como las tareas de reinicio con algunos pasos extra. ¿Cómo se hace saber a otros desarrolladores que se introducirá una nueva función que cubra estas funcionalidades?

Se ajusta el código de esta manera:

12345678910publicclassServer{privatestring _name;publicstring Name {get=> _name;set=> _name =value;}publicServer(string name){ Name = name;}[Obsolete("No utilice el método UpdateServer(), utilice el método UpdateAndRestart()",false)]publicvoidUpdateServer(){ Console. WriteLine($"Descarga e instalación de actualizaciones en el servidor: {Nombre}!");}publicvoidRestatServer(){ Consola.WriteLine($"Reiniciar con gracia el servidor: {Nombre}");}publicvoidUpdateAndRestart(){ Consola.WriteLine($"Instalar las últimas actualizaciones en la máquina: {Nombre} y reiniciar");}}

csharp

El punto clave aquí es la siguiente línea:

1[Obsoleto("No use el método UpdateServer(), use el método UpdateAndRestart()",false)]

csharp

Es necesario que los nombres de las funciones sean precisos, de lo contrario el compilador arrojará un error que indique que el método al que nos referimos no puede ser encontrado.

El segundo argumento es verdadero o falso. Cuando lo pones en falso, el compilador lanzará una advertencia, pero la compilación se llevará a cabo. Si se establece en true, se lanzará una excepción de error y la compilación no se realizará. Este comportamiento es común en la mayoría de los atributos predefinidos.

Atributo-objetivo apunta a la entidad a la que se dirige el atributo. En este caso, la función UpdateServer() es el objetivo.