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

Im folgenden Beispiel wird die Verwendung von ConditionalAttributeveranschaulicht. 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 pragmatisch 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 Attribute. ConditionalAttribute entweder wird ignoriert oder erzeugt eine Compilerwarnung oder Fehlermeldung, wenn Sie sie auf einen anderen Typ anwenden.

Das Anwenden von ConditionalAttribute auf eine Methode gibt an, dass ein Aufruf der Methode nicht in Microsoft Zwischensprache (MSIL) kompiliert werden soll, es sei denn, das bedingte Kompilierungssymbol, das ConditionalAttribute zugeordnet ist, ist definiert. Sie erhalten in Visual Studio einen Kompilierungsfehler, wenn Sie dieses Attribut auf eine Methode anwenden, die keine Void zurückgibt. Das Anwenden ConditionalAttribute auf 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 vom Compiler immer noch vom Typ überprüft.

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

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

  • Verwenden Sie Umgebungsvariablen in der Betriebssystemshell; Legen Sie z. B. DEBUG=1 fest.

  • Verwenden Sie Pragmen 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 Common Language Specification (CLS) entsprechen, dürfen ignoriert werden ConditionalAttribute. Die C#-, F#-, Visual Basic- und C++-Compiler unterstützen ConditionalAttribute; der JScript-Compiler unterstützt das Attribut nicht.

Note

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

ConditionalAttribute wird auf die In- Debug und Trace Klassen definierten Methoden angewendet.

Weitere Informationen zur Verwendung von Attributen finden Sie unter "Attribute".

Konstruktoren

Name Beschreibung
ConditionalAttribute(String)

Initialisiert eine neue Instanz der ConditionalAttribute-Klasse.

Eigenschaften

Name Beschreibung
ConditionString

Ruft das Symbol für die bedingte Kompilierung ab, das dem ConditionalAttribute Attribut zugeordnet ist.

TypeId

Wenn sie in einer abgeleiteten Klasse implementiert wird, wird ein eindeutiger Bezeichner für diese Attribute.

(Geerbt von Attribute)

Methoden

Name Beschreibung
Equals(Object)

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

(Geerbt von Attribute)
GetHashCode()

Gibt den Hashcode für diesen instance zurück.

(Geerbt von Attribute)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
IsDefaultAttribute()

Wenn sie in einer abgeleiteten Klasse überschrieben wird, gibt an, ob der Wert dieser Instanz der Standardwert für die abgeleitete Klasse ist.

(Geerbt von Attribute)
Match(Object)

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem angegebenen Objekt entspricht.

(Geerbt von Attribute)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
ToString()

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

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

Name Beschreibung
_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 denen 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)

Bietet Zugriff auf Eigenschaften und Methoden, die von einem Objekt verfügbar gemacht werden.

(Geerbt von Attribute)

Gilt für: