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 Option "/define compiler" definiert ist. Sie können verschiedene Ergebnisse erhalten, indem Sie die Compileroption ändern. Sie können optional die Bedingungen 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 von Klassen ist jedoch nur für Typen gültig, die von Attribute. ConditionalAttribute Entweder wird ignoriert oder eine Compilerwarnung oder Fehlermeldung erzeugt, wenn Sie sie auf einen anderen Typ anwenden.

Das Anwenden ConditionalAttribute auf eine Methode gibt an Compiler an, dass ein Aufruf der Methode nicht in Microsoft-Zwischensprache (MSIL) kompiliert werden sollte, es sei denn, das bedingte Kompilierungssymbol, das mit der Methode verknüpft ConditionalAttribute ist, wird definiert. Sie erhalten einen Kompilierungsfehler in Visual Studio, wenn Sie dieses Attribut auf eine Methode anwenden, die keine Leere zurückgibt. Das Anwenden ConditionalAttribute auf ein Attribut gibt an, dass das Attribut nicht an Metadaten gesendet werden soll, es sei denn, das Symbol für die bedingte Kompilierung wird definiert. Alle Argumente, die an die Methode oder das Attribut übergeben werden, werden vom Compiler weiterhin typcheckt.

Sie können die folgenden Techniken verwenden, um bedingte Kompilierungssymbole zu definieren:

  • Verwenden von Compiler-Befehlszeilenoptionen; Beispiel: /define:DEBUG.

  • Verwenden Von 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  
    

    Um die Variable rückgängig zu machen, verwenden Sie folgendes:

    #undef DEBUG  
    
    #Const DEBUG=False  
    

Compiler, die die Common Language Specification (CLS) erfüllen, können ignoriert werden ConditionalAttribute. Die C#-, F#-, Visual Basic- und C++-Compiler unterstützen; der JScript Compiler ConditionalAttributeunterstützt das Attribut nicht.

Hinweis

In Visual Basic ist der AddressOf Operator nicht von diesem Attribut betroffen. Beispielsweise wird immer aufgerufendelegate, Call CType(AddressOf delegate, Action) obwohl Call delegate() möglicherweise nicht.

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

Weitere Informationen zum Verwenden 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