Atributos condicionales
El atributo Conditional que en C# 1.X permitía especificar si compilar ciertas llamadas a métodos en función de valores de constantes de preprocesador ha sido ahora ampliado para también poderse aplicar a la utilización de atributos. En este caso, si la utilización del atributo para un determinado fichero no se compila por no estar definida la constante de la que depende, ninguna clase del mismo a la se aplique lo almacenará entre sus metadatos. Así, si tenemos un fichero test.cs con la siguiente definición de atributo:
using System; using System.Diagnostics; [Conditional("DEBUG")] public class TestAttribute : Attribute {}
|
Y con él compilamos un fichero miclase.cs con el contenido:
#define DEBUG [Test] class MiClase {}
|
En el ensamblado resultante la clase MiClase incluirá el atributo Test entre sus metadatos por estar definida la constante DEBUG dentro del fichero en que se usa el atributo. Pero por el contrario, si además compilásemos otro fichero miclase2.cs como el siguiente:
#undef DEBUG [Test] class MiClase2 {}
|
Entonces la MiClase2 del ensamblado resultante no almacenaría el atributo Test entre sus metadatos por no estar definida la constante DEBUG en el fichero donde se declaró.