Partager via


Conditional (Guide de programmation C#)

Mise à jour : novembre 2007

Fait dépendre l'exécution d'une méthode d'un identificateur de prétraitement. L'attribut Conditional est un alias pour ConditionalAttribute et peut s'appliquer à une méthode ou une classe d'attributs.

Dans cet exemple, Conditional est appliqué à une méthode pour activer ou désactiver l'affichage d'informations de diagnostic spécifiques au programme :

#define TRACE_ON
using System;
using System.Diagnostics;

public class Trace
{
    [Conditional("TRACE_ON")]
    public static void Msg(string msg)
    {
        Console.WriteLine(msg);
    }
}

public class ProgramClass
{
    static void Main()
    {
        Trace.Msg("Now in Main...");
        Console.WriteLine("Done.");
    }
}

Si l'identificateur TRACE_ON n'est pas défini, aucune sortie de trace n'est affichée.

L'attribut Conditional est souvent utilisé avec l'identificateur DEBUG pour activer la trace et enregistrer des fonctionnalités pour des versions de débogage mais non pour des versions Release, de la manière suivante :

[Conditional("DEBUG")]
static void DebugMethod()
{
}

Notes

Lorsqu'une méthode marquée comme conditionnelle est appelée, la présence ou l'absence du symbole de prétraitement spécifié détermine si l'appel est inclus ou omis. Si le symbole est défini, l'appel est inclus ; sinon, il est omis. L'utilisation de Conditional une alternative plus propre, élégante et moins sujette aux erreurs que les méthodes englobantes de #if et #endif :

#if DEBUG
void ConditionalMethod()
{
}
#endif

Une méthode conditionnelle doit se trouver dans une classe ou déclaration de structure et doit avoir un retour de type void.

Utilisation de plusieurs identificateurs

Si une méthode possède plusieurs attributs Conditional, un appel à la méthode est inclus si l'un des symboles conditionnels au moins est défini (en d'autres termes, les symboles sont assortis de l'opérateur OR). Dans cet exemple, la présence de A ou B résulte en un appel de méthode :

[Conditional("A"), Conditional("B")]
static void DoIfAorB()
{
    // ...
}

Pour obtenir une intersection logique des symboles, vous pouvez définir des méthodes conditionnelles en série. Par exemple, la deuxième méthode ci-dessous ne s'exécute que si A et B sont définis :

[Conditional("A")]
static void DoIfA()
{
    DoIfAandB();
}

[Conditional("B")]
static void DoIfAandB()
{
    // Code to execute when both A and B are defined...
}

Utilisation du conditionnel avec des classes d'attributs

L'attribut Conditional peut également être appliqué à une définition de classe d'attributs. Dans cet exemple, l'attribut Documentation personnalisé n'ajoute des informations aux métadonnées que si DEBUG est défini.

[Conditional("DEBUG")]
public class Documentation : System.Attribute
{
    string text;

    public Documentation(string text)
    {
        this.text = text;
    }
}

class SampleClass
{
    // This attribute will only be included if DEBUG is defined.
    [Documentation("This method displays an integer.")]
    static void DoWork(int i)
    {
        System.Console.WriteLine(i.ToString());
    }
}

Voir aussi

Concepts

Guide de programmation C#

Référence

Réflexion (Guide de programmation C#)

Attributs (Guide de programmation C#)

Levée de l'ambiguïté sur les cibles d'attribut (Guide de programmation C#)

Création d'attributs personnalisés (Guide de programmation C#)

Accès à des attributs à l'aide de la réflexion (Guide de programmation C#)

System.Reflection

Attribute