Atributo condicional

Definición: ¿Qué significa atributo condicional?

Un atributo condicional es una etiqueta que se usa para marcar un método o clase cuya ejecución depende de la definición de identificador de preprocesamiento.

Un atributo condicional indica una condición para especificar la compilación condicional en la que los métodos se llaman selectivamente sobre la base de la definición de símbolos. Indica al compilador que compile (en el lenguaje intermedio de Microsoft) o no compile bloques de código específicos, según una condición, ya sea que se defina o no un símbolo de compilación condicional específico. Si no se han definido símbolos específicos en el instante en que se llaman, el compilador ignorará las llamadas a ese método o clase.

Techinfo explica el atributo condicional

Un atributo condicional tiene las siguientes características:

  • Se puede aplicar a métodos y clases, pero solo si se derivan de un atributo.
  • Al aplicar el atributo condicional a una clase, la clase de atributo se emitirá a los metadatos solo si se define el símbolo de compilación condicional.
  • Toma un parámetro, que es el símbolo identificador que controla la compilación.
  • Los argumentos pasados ​​a un método condicional o clase de atributo serán verificados por el compilador.
  • Es completamente cuidado por el compilador y no por el tiempo de ejecución.
  • No se puede aplicar a un método utilizado en una expresión de creación de delegados.
  • No afecta el código generado para el método condicional, pero afecta la llamada al método.

Un atributo condicional proporciona un patrón de programación declarativo y ayuda a mantener fácilmente el código fuente. Al aplicar un atributo condicional a nivel de método, el código fuente es más legible. El llamador de un método no necesita tomar código adicional para la compilación condicional. Se utiliza un atributo condicional para habilitar las funcionalidades de seguimiento y registro en las compilaciones de depuración mediante el uso del identificador DEBUG para mostrar y registrar información de diagnóstico relacionada con la aplicación. Además, ayuda a separar la lógica relacionada con la compilación de depuración (en sistemas utilizados para el desarrollo) de las compilaciones de lanzamiento, que se implementan en sitios y aplicaciones. Para mantener múltiples ediciones (con características seleccionadas en alguna edición) de un software sin duplicación de código, la compilación condicional constituye la técnica correcta mediante la cual se mantiene el código fuente principal único para múltiples ediciones basadas en los símbolos respectivos definidos para ellas.

A continuación se presentan algunas reglas a seguir al usar un atributo condicional:

  • Un método condicional dentro de una clase o declaración de estructura debe tener un tipo de retorno como void.
  • Si bien se utilizan identificadores múltiples como atributos condicionales, la inclusión de método (s) se basa en el resultado del O lógico o del Y lógico en los símbolos definidos.
  • No se puede especificar en un método en una declaración de interfaz.
  • Un método condicional no puede ir precedido de la palabra clave "override", pero puede ser virtual. Si se reemplaza, se considera un condicional implícitamente.
  • Los símbolos considerados para la compilación condicional se pueden definir como opciones de línea de comandos del compilador o como variables de entorno del shell del sistema operativo o como pragmas (utilizando la directiva de preprocesador "#define") en el código fuente.
  • A diferencia de C ++, la definición de símbolos en C # puede estar en cualquier orden y, por lo tanto, el orden entre "#define" y un método condicional debe establecerse correctamente.

Aunque el uso de "#if y #endif" forma una opción alternativa al atributo condicional, este último proporciona un enfoque más limpio, elegante y menos propenso a errores en comparación con el primero. Internamente, la diferencia es que mientras se usa un atributo condicional para un método, el método seguirá siendo parte del ensamblaje y no se cargará. Pero en el caso de #if / #endif, el método no será visible en el ensamblado en sí.

Esta definición se escribió en el contexto de C #