Очень хороший атрибут, который используется совместно с директивами препроцессора. Смотрим пример:
using System; using System.Diagnostics; class MyTrace { [Conditional("DEBUG")] public void Print() { Console.WriteLine("Print"); } } class MainClass { public static void Main(string[] args) { MyTrace m = new MyTrace(); m.Print(); } }
Если компиляция будет производиться с определением DEBUG, то функция Print будет существовать и вызываться.
А вот есть нет, то компилятор сделает вид, что она ну существует, и не ее реализации, не ее вызова в конечной программе не будет. Обратите внимание что и вызов это функции то же удалиться и это не приведет к ошибке времени выполнения.