ConditionalAttribute Klasse

Definition

Zeigt den Compilern an, dass ein Methodenaufruf oder ein Attribut ignoriert werden soll, wenn kein angegebenes bedingtes Kompilierungssymbol definiert ist.

public ref class ConditionalAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true)]
public sealed class ConditionalAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple=true)]
[System.Serializable]
public sealed class ConditionalAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true)]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ConditionalAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true)>]
type ConditionalAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple=true)>]
[<System.Serializable>]
type ConditionalAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true)>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ConditionalAttribute = class
    inherit Attribute
Public NotInheritable Class ConditionalAttribute
Inherits Attribute
Vererbung
ConditionalAttribute
Attribute

Beispiele

Das folgende Beispiel veranschaulicht die Verwendung von ConditionalAttribute. Im Beispiel wird davon ausgegangen, dass die Bedingung mit der Compileroption /define definiert ist. Sie können verschiedene Ergebnisse erhalten, indem Sie die Compileroption ändern. Sie können die Bedingungen optional definieren, indem Sie Pragmas im Beispielcode verwenden, anstatt sie als Compileroptionen zu identifizieren.

#define CONDITION1
#define CONDITION2
using System;
using System.Diagnostics;

class Test
{
    static void Main()
    {
        Console.WriteLine("Calling Method1");
        Method1(3);
        Console.WriteLine("Calling Method2");
        Method2();

        Console.WriteLine("Using the Debug class");
        Debug.Listeners.Add(new ConsoleTraceListener());
        Debug.WriteLine("DEBUG is defined");
    }

    [Conditional("CONDITION1")]
    public static void Method1(int x)
    {
        Console.WriteLine("CONDITION1 is defined");
    }

    [Conditional("CONDITION1"), Conditional("CONDITION2")]
    public static void Method2()
    {
        Console.WriteLine("CONDITION1 or CONDITION2 is defined");
    }
}

/*
When compiled as shown, the application (named ConsoleApp)
produces the following output.

Calling Method1
CONDITION1 is defined
Calling Method2
CONDITION1 or CONDITION2 is defined
Using the Debug class
DEBUG is defined
*/
#Const CONDITION1 = True
#Const CONDITION2 = True
Imports System.Diagnostics

Class Test

    Shared Sub Main()
        Console.WriteLine("Calling Method1")
        Method1(3)
        Console.WriteLine("Calling Method2")
        Method2()
        
        Console.WriteLine("Using the Debug class")
        Debug.Listeners.Add(New ConsoleTraceListener())
        Debug.WriteLine("DEBUG is defined")
    End Sub
       
    <ConditionalAttribute("CONDITION1")> _
    Shared Sub Method1(x As Integer)
        Console.WriteLine("CONDITION1 is defined")
    End Sub
    
    <ConditionalAttribute("CONDITION1"), ConditionalAttribute("CONDITION2")> _
    Shared Sub Method2()
        Console.WriteLine("CONDITION1 or CONDITIOIN2 is defined")
    End Sub
    
End Class


' When compiled as shown, the application (named ConsoleApp) 
' produces the following output.

'Calling Method1
'CONDITION1 is defined
'Calling Method2
'CONDITION1 or CONDITION2 is defined
'Using the Debug class
'DEBUG is defined

Hinweise

Sie können das ConditionalAttribute Attribut auf Methoden und Klassen anwenden. Die Verwendung für Klassen ist jedoch nur für Typen gültig, die von Attributeabgeleitet sind. ConditionalAttribute entweder wird ignoriert oder erzeugt eine Compilerwarnung oder Fehlermeldung, wenn Sie sie auf einen anderen Typ anwenden.

Das Anwenden auf ConditionalAttribute eine -Methode gibt für Compiler an, dass ein Aufruf der -Methode nicht in MSIL (Microsoft Intermediate Language) kompiliert werden sollte, es sei denn, das Symbol für ConditionalAttribute die bedingte Kompilierung, dem zugeordnet ist, ist definiert. Sie erhalten einen Kompilierungsfehler in Visual Studio, wenn Sie dieses Attribut auf eine Methode anwenden, die void nicht zurückgibt. Das Anwenden auf ConditionalAttribute ein Attribut gibt an, dass das Attribut nicht an Metadaten ausgegeben werden soll, es sei denn, das Symbol für die bedingte Kompilierung ist definiert. Alle Argumente, die an die Methode oder das Attribut übergeben werden, werden weiterhin vom Compiler typgeprüft.

Sie können die folgenden Techniken verwenden, um Symbole für die bedingte Kompilierung zu definieren:

  • Verwenden Sie Compiler-Befehlszeilenoptionen. Beispiel : /define:DEBUG.

  • Verwenden Sie Umgebungsvariablen in der Betriebssystemshell. Legen Sie beispielsweise DEBUG=1 fest.

  • Verwenden Sie Pragmas im Quellcode. Definieren Sie beispielsweise die Kompilierungsvariable wie folgt:

    #define DEBUG  
    
    #Const DEBUG=True  
    

    Verwenden Sie Folgendes, um die Variable rückgängig zu machen:

    #undef DEBUG  
    
    #Const DEBUG=False  
    

Compiler, die der CLS -Spezifikation (Common Language Specification) entsprechen, dürfen ignorieren ConditionalAttribute. Die C#-, F#-, Visual Basic- und C++-Compiler unterstützen ConditionalAttribute; der JScript-Compiler unterstützt das Attribut nicht.

Hinweis

In Visual Basic ist der AddressOf Operator von diesem Attribut nicht betroffen. Ruft z. B. Call CType(AddressOf delegate, Action) immer auf delegate, obwohl Call delegate() möglicherweise nicht.

ConditionalAttribute wird auf die Methoden angewendet, die in den Debug Klassen und Trace definiert sind.

Weitere Informationen zur Verwendung von Attributen finden Sie unter Attribute.

Konstruktoren

ConditionalAttribute(String)

Initialisiert eine neue Instanz der ConditionalAttribute-Klasse.

Eigenschaften

ConditionString

Ruft das dem ConditionalAttribute-Attribut zugeordnete Symbol für die bedingte Kompilierung ab.

TypeId

Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab.

(Geerbt von Attribute)

Methoden

Equals(Object)

Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist.

(Geerbt von Attribute)
GetHashCode()

Gibt den Hashcode für diese Instanz zurück.

(Geerbt von Attribute)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
IsDefaultAttribute()

Gibt beim Überschreiben in einer abgeleiteten Klasse an, ob der Wert der Instanz der Standardwert für die abgeleitete Klasse ist.

(Geerbt von Attribute)
Match(Object)

Beim Überschreiben in einer abgeleiteten Klasse wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem bestimmten Objekt entspricht.

(Geerbt von Attribute)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu.

(Geerbt von Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Ruft die Typinformationen für ein Objekt ab, mit deren Hilfe die Typinformationen für eine Schnittstelle abgerufen werden können.

(Geerbt von Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1).

(Geerbt von Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Stellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit.

(Geerbt von Attribute)

Gilt für: