Oui, la méthode elle-même encore est construit cependant vous compilez.
C'est tout à fait logique - parce que le point de Conditional
est de dépendre des symboles de préprocesseur définis lorsque l'appelant est construit, pas lorsque le est construit callee.
Test simple - construire ceci:
using System;
using System.Diagnostics;
class Test
{
[Conditional("FOO")]
static void CallMe()
{
Console.WriteLine("Called");
}
static void Main()
{
CallMe();
}
}
exécuter le code (sans définir FOO) et vous verrez qu'il n'y a pas de sortie, mais si vous regardez dans le réflecteur, vous verrez la méthode est toujours là.
En d'autres termes: pensez-vous que les assemblys libérés .NET (ceux que nous compilons) sont construits avec le symbole DEBUG défini? Si ce n'est pas le cas (et je le soupçonne fortement qu'ils ne le sont pas!), Comment pourrions-nous appeler Debug.Assert
etc?
Il est vrai que quand vous construisez privés méthodes, il serait logique de ne pas inclure - mais comme vous pouvez le voir, il est encore construit - qui est raisonnable pour la simplicité et de cohérence.
+1 Vous avez raison. Qu'est-ce qui était stupide de penser cela? – kemiller2002