Freigeben über


Conditional-Attribut (C#-Programmierhandbuch)

Aktualisiert: November 2007

Macht die Ausführung einer Methode von einem Vorverarbeitungsbezeichner abhängig. Das Conditional-Attribut ist ein Alias für ConditionalAttribute und kann auf eine Methode oder eine Attribut-Klasse angewendet werden.

In diesem Beispiel wird Conditional auf eine Methode angewendet, um die Anzeige von programmspezifischen Diagnoseinformationen zu aktivieren bzw. zu deaktivieren:

#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.");
    }
}

Wenn der TRACE_ON-Bezeichner nicht definiert ist, wird keine Ablaufverfolgungsausgabe angezeigt.

Das Conditional-Attribut wird oft mit dem DEBUG-Bezeichner verwendet, um Features zur Ablaufverfolgung und Protokollierung für Debugbuilds (nicht für Releasebuilds) zu aktivieren. Beispiel:

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

Hinweise

Wenn eine als bedingt gekennzeichnete Methode aufgerufen wird, bestimmt das Vorhandensein oder Nichtvorhandensein des angegebenen Präprozessorsymbols, ob der Aufruf einbezogen oder weggelassen wird. Ist das Symbol definiert, wird der Aufruf einbezogen; andernfalls wird er nicht berücksichtigt. Die Verwendung von Conditional stellt eine klarer definierte, elegantere und weniger Fehler anfällige Alternative zu dem Verfahren dar, bei dem Methoden innerhalb von #if und #endif eingeschlossen werden, z. B.:

#if DEBUG
void ConditionalMethod()
{
}
#endif

Eine bedingte Methode muss eine Methode in einer Klassendeklaration oder Strukturdeklaration sein und muss den Rückgabewert void haben.

Verwenden mehrerer Bezeichner

Wenn eine Methode über mehrere Conditional-Attribute verfügt, wird der Aufruf der Methode einbezogen, sofern mindestens ein bedingtes Symbol definiert ist. Dies bedeutet, dass die Symbole mit einer logischen OR-Verknüpfung verbunden sind. In diesem Beispiel führt das Vorhandensein von A oder B zu einem Methodenaufruf:

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

Um Symbole mit einer logischen AND-Verknüpfung zu verbinden, können Sie bedingte Methoden in Serie definieren. Zum Beispiel wird die nachfolgende zweite Methode nur ausgeführt, wenn sowohl A als auch B definiert sind:

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

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

Verwenden von Conditional für Attributklassen

Das Conditional-Attribut kann auch auf die Definition einer Attributklasse angewendet werden. In diesem Beispiel fügt das benutzerdefinierte Documentation-Attribut den Metadaten nur Informationen zu, wenn DEBUG definiert ist.

[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());
    }
}

Siehe auch

Konzepte

C#-Programmierhandbuch

Referenz

Reflektion (C#-Programmierhandbuch)

Attribute (C#-Programmierhandbuch)

Auflösen der Mehrdeutigkeit von Attributzielen (C#-Programmierhandbuch)

Erstellen benutzerdefinierter Attribute (C#-Programmierhandbuch)

Zugriff auf Attribute mit Reflektion (C#-Programmierhandbuch)

System.Reflection

Attribute