Freigeben über


ConditionalAttribute-Klasse

Zeigt Compilern an, dass eine Methode aufgerufen werden kann, wenn auf die Methode ein angegebener Präprozessorbezeichner angewendet wird.

Namespace: System.Diagnostics
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
<SerializableAttribute> _
<AttributeUsageAttribute(AttributeTargets.Class Or AttributeTargets.Method, AllowMultiple:=True)> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class ConditionalAttribute
    Inherits Attribute
'Usage
Dim instance As ConditionalAttribute
[SerializableAttribute] 
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, AllowMultiple=true)] 
[ComVisibleAttribute(true)] 
public sealed class ConditionalAttribute : Attribute
[SerializableAttribute] 
[AttributeUsageAttribute(AttributeTargets::Class|AttributeTargets::Method, AllowMultiple=true)] 
[ComVisibleAttribute(true)] 
public ref class ConditionalAttribute sealed : public Attribute
/** @attribute SerializableAttribute() */ 
/** @attribute AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, AllowMultiple=true) */ 
/** @attribute ComVisibleAttribute(true) */ 
public final class ConditionalAttribute extends Attribute
SerializableAttribute 
AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, AllowMultiple=true) 
ComVisibleAttribute(true) 
public final class ConditionalAttribute extends Attribute

Hinweise

Das ConditionalAttribute unterstützt die in der Trace-Klasse und der Debug-Klasse definierten bedingten Methoden.

Methoden, die mit dem ConditionalAttribute-Attribut versehen sind, werden immer in MSIL (Microsoft Intermediate Language) kompiliert. Die Methoden können jedoch nicht zur Laufzeit aufgerufen werden. Wenn eine Methode über Argumente verfügt, wird zur Laufzeit deren Typ überprüft, sie werden jedoch nicht ausgewertet.

Hinweis

In der Standardeinstellung definiert Visual Studio 2005 bei der Kompilierung von Releasebuilds die TRACE-Konstante für die bedingte Kompilierung und bei der Kompilierung von Debugbuilds die DEBUG-Konstante und die TRACE-Konstante. Bei Befehlszeilenbuilds müssen alle Konstanten für die bedingte Kompilierung angegeben werden.

Hinweis

Ein ConditionalAttribute, dem ein ConditionString zugeordnet ist, kann der Definition einer Methode angefügt werden, wodurch eine bedingte Methode erstellt wird. Danach kann ein Compiler bei einem Aufruf dieser Methode diesen ignorieren, sofern in der Site des Aufrufs keine Kompilierungsvariable mit einem Wert definiert ist, der bei Beachtung der Groß- und Kleinschreibung mit dem ConditionString übereinstimmt, der für ConditionalAttribute bereitgestellt wurde.

Compiler können mehrere Techniken bereitstellen, um solche Kompilierungsvariablen zu definieren, z. B.:

  • Befehlszeilen-Compilerschalter (z. B. /define:DEBUG).

  • Umgebungsvariablen in der Shell des Betriebssystems (z. B. SET DEBUG=1).

  • Pragmas im Quellcode (z. B. #define DEBUG, um die Kompilierungsvariable zu definieren, oder #undef DEBUG, um die Definition aufzuheben).

CLS-kompatible Compiler dürfen ConditionalAttribute ignorieren.

Weitere Informationen zum Verwenden von Attributen finden Sie unter Erweitern von Metadaten mithilfe von Attributen.

Beispiel

Im folgenden Beispiel einer Konsolenanwendung wird die Verwendung von ConditionalAttribute mit einem bestimmten Compiler veranschaulicht, der die Verwendung dieses Attributs unterstützt.

Imports System
Imports System.Diagnostics
Imports Microsoft.VisualBasic

Class Module1

    Shared Sub Main()
        Console.WriteLine("Console.WriteLine is always displayed.")

        Dim myWriter As New TextWriterTraceListener(System.Console.Out)
        Debug.Listeners.Add(myWriter)

        Dim A As New Module1()
        A.Sub1()
    End Sub      'Main

    <Conditional("CONDITION1"), Conditional("CONDITION2")> _
    Public Sub Sub1()
        Sub2()
        Sub3()
    End Sub

    <Conditional("CONDITION1")> _
    Public Sub Sub2()
        Debug.WriteLine("CONDITION1 and DEBUG are defined")
    End Sub

    <Conditional("CONDITION2")> _
    Public Sub Sub3()
        Debug.WriteLine("CONDITION2 and DEBUG are defined")
        Trace.WriteLine("CONDITION2 and TRACE are defined")
    End Sub

End Class
' This console application produces the following output when compiled as shown.
'
'Console.WriteLine is always displayed.

'
'Console.WriteLine is always displayed.
'CONDITION1 and DEBUG are defined

'
'Console.WriteLine is always displayed.
'CONDITION1 and DEBUG are defined
'CONDITION2 and DEBUG are defined
using System;
using System.Diagnostics;

class Class1
{
    [STAThread]
    static void Main(string[] args)
    {               
        TextWriterTraceListener myWriter = 
            new TextWriterTraceListener(System.Console.Out);
        Debug.Listeners.Add(myWriter);
        Console.WriteLine("Console.WriteLine is always displayed");
        Method1();
        Method2();
    }
    
    [Conditional("CONDITION1")]
    public static void Method1()
    {
        Debug.Write("Method1 - DEBUG and CONDITION1 are specified\n");
        Trace.Write("Method1 - TRACE and CONDITION1 are specified\n");
    }
    
    [Conditional("CONDITION1"), Conditional("CONDITION2")]  
    public static void Method2()
    {
        Debug.Write("Method2 - DEBUG, CONDITION1 or CONDITION2 are specified\n");
    }
}

/*
This console application produces the following output when compiled as shown.

Console.WriteLine is always displayed
Method1 - DEBUG and CONDITION1 are specified
Method1 - TRACE and CONDITION1 are specified
Method2 - DEBUG, CONDITION1 or CONDITION2 are specified

Console.WriteLine is always displayed
Method2 - DEBUG, CONDITION1 or CONDITION2 are specified

Console.WriteLine is always displayed
Method1 - TRACE and CONDITION1 are specified

*/
/*
C++ with Managed Extensions uses the C++ standard preprocessor.  Use the 
preprocessor directives rather than this attribute.
*/

Vererbungshierarchie

System.Object
   System.Attribute
    System.Diagnostics.ConditionalAttribute

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

ConditionalAttribute-Member
System.Diagnostics-Namespace