Sì, il metodo stesso ancora è costruito tuttavia si compila.
Questo è del tutto logico - perché il punto di Conditional
è dipendere simboli preprocessore definita quando la chiamante è costruito, non quando il callee è costruito.
semplice test - costruire questo:
using System;
using System.Diagnostics;
class Test
{
[Conditional("FOO")]
static void CallMe()
{
Console.WriteLine("Called");
}
static void Main()
{
CallMe();
}
}
eseguire il codice (senza definire FOO) e vedrete non c'è uscita, ma se si guarda in Reflector vedrete il metodo è ancora lì.
Per dirla in altro modo: pensi che i .NET assemblee rilasciati (quelle che compilare contro) sono costruiti con il simbolo DEBUG definiti? Se non lo sono (e sospetto fortemente che non lo siano!) Come potremmo chiamare Debug.Assert
ecc.?
Certo quando si sta costruendo privati metodi avrebbe senso non includere - ma come si può vedere, è ancora è incorporato - che è ragionevole per semplicità e coerenza.
fonte
2010-08-13 13:47:12
+1 Hai ragione. Che cosa è stato stupido da parte mia pensarlo. – kemiller2002