2009-09-11 4 views
11

Je veux utiliser l'attribut conditionnel sur une classe, ou plus précisément, y a-t-il quelque chose qui donne cet effet? Fondamentalement, je ne veux pas que la classe soit là en mode débogage. Je ne veux pas non plus avoir à emballer chaque appel dans une directive #if DEBUG.Y at-il un attribut conditionnel au niveau de la classe?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 

namespace NameSpace 
{ 
    [Conditional("Debug")] 
    public class ClassName 
    { 

     public ClassName() 
     { 
     } 
    } 
} 

Répondre

10

Non, il n'y en a pas. Les attributs conditionnels ne font pas disparaître leurs cibles elles-mêmes - ils font juste que le compilateur omet les utilisateurs des cibles.

Eric Lippert avait un post on just this sort of thing aujourd'hui, comme il arrive. Lisez-le et voyez si tout cela a plus de sens pour vous.

Si vous vraiment besoin d'omettre la classe elle-même en mode de version, puis utiliser des directives de préprocesseur - mais vous devrez faire la même chose pour tous les appelants. Quel mal a-t-il à garder la classe en mode release, de toute façon?

Est-ce que cela pourrait être une classe dans un projet différent? Si oui, puis vous pourriez simplement appliquer l'attribut conditionnel à toutes les méthodes, alors le type ne serait pas nécessaire en mode de libération, ainsi vous pourriez éviter d'expédier l'ensemble.

+1

Puis-je omettre tous les utilisateurs de la classe? –

+1

Si vous mettez Conditional sur toutes les * méthodes * de la classe, alors tous les appels seront supprimés, mais la classe elle-même sera toujours construite. –

+0

Donc les instances de la classe seront toujours créées et utiliseront la mémoire? –

0

Je ne sais pas, si j'ai bien compris. Mais, si vous décorez toutes les méthodes avec ConditionalAttribute, tout sera supprimé lorsque le symbole n'est pas présent. Et par conséquent, bien que la classe soit disponible pour l'utilisation, il n'y aura aucune méthode à l'exécution pour l'utiliser.

Je ne suis pas sûr, pourquoi vous voudriez exclure une classe en fonction du symbole? Pourriez-vous expliquer le scénario?

Questions connexes