Switch Klasse

Definition

Stellt eine abstrakte Basisklasse zum Erstellen neuer Schalter für Debuggen und Ablaufverfolgung bereit.Provides an abstract base class to create new debugging and tracing switches.

public ref class Switch abstract
public abstract class Switch
type Switch = class
Public MustInherit Class Switch
Vererbung
Switch
Abgeleitet

Beispiele

Im folgenden Beispiel wird gezeigt, wie eine neue Switch-Klasse mit vier Ebenen der Ablauf Verfolgung definiert wird, die verwendet werden können, um eine Ablauf Verfolgung für eine-Ablauf VerfolgungThe following example shows how to define a new Switch class with four levels of tracing that can be used to trace a call stack. Mithilfe des-Schalters können Sie die Anwendung so instrumentieren, dass Sie jedes Mal, wenn die Methode eingegeben oder beendet wird, protokolliert wird.You can use the switch to instrument your application to log each time the method is entered or exited.

Im ersten Beispiel wird die-Enumeration erstellt, mit der die Ebene des Schalters festgelegt wird.The first example creates the enumeration used to set the level of the switch.

// The following are possible values for the new switch.
public enum class MethodTracingSwitchLevel
{
    Off = 0,
    EnteringMethod = 1,
    ExitingMethod = 2,
    Both = 3
};


// The following are possible values for the new switch.
public enum MethodTracingSwitchLevel
{
    Off = 0,
    EnteringMethod = 1,
    ExitingMethod = 2,
    Both = 3,
}
' The following are possible values for the new switch.
Public Enum MethodTracingSwitchLevel
    Off = 0
    EnteringMethod = 1
    ExitingMethod = 2
    Both = 3
End Enum 'MethodTracingSwitchLevel

Im folgenden Beispiel wird der neue Switch erstellt.The following example creates the new switch. Der Code implementiert eine Level-Eigenschaft, um den Wert des neuen Schalters festzulegen.The code implements a Level property to set the value of the new switch. Level Ruft die geschützte Eigenschaft SwitchSetting auf, die dem neuen Switch den Wert zuweist.Level calls the protected property SwitchSetting that assigns the value to the new switch. In diesem Beispiel werden auch zwei Assessor-Eigenschaften implementiert, um den zugewiesenen Wert des Schalters zu erhalten.This example also implements two assessor properties to get the assigned value of the switch.

public ref class MyMethodTracingSwitch: public Switch
{
protected:
    bool outExit;
    bool outEnter;
    MethodTracingSwitchLevel level;

public:
    MyMethodTracingSwitch( String^ displayName, String^ description )
       : Switch( displayName, description )
    {}

    property MethodTracingSwitchLevel Level
    {
        MethodTracingSwitchLevel get()
        {
            return level;
        }

       void set( MethodTracingSwitchLevel value )
       {
           SetSwitchSetting( (int)value );
       }
    }

protected:
    void SetSwitchSetting( int value )
    {
        if ( value < 0 )
        {
            value = 0;
        }

        if ( value > 3 )
        {
            value = 3;
        }

        level = (MethodTracingSwitchLevel)value;
        outEnter = false;
        if ((value == (int)MethodTracingSwitchLevel::EnteringMethod) ||
            (value == (int)MethodTracingSwitchLevel::Both))
        {
            outEnter = true;
        }

        outExit = false;
        if ((value == (int)MethodTracingSwitchLevel::ExitingMethod) ||
            (value == (int)MethodTracingSwitchLevel::Both))
        {
            outExit = true;
        }
    }

public:
    property bool OutputExit
    {
        bool get()
        {
            return outExit;
        }
    }

    property bool OutputEnter
    {
        bool get()
        {
            return outEnter;
        }
    }
};


public class MyMethodTracingSwitch : Switch
{
     protected bool outExit;
     protected bool outEnter;
     protected MethodTracingSwitchLevel level;

     public MyMethodTracingSwitch(string displayName, string description) :
         base(displayName, description)
     {
     }

     public MethodTracingSwitchLevel Level
     {
         get
         {
             return level;
         }
         set
         {
             SetSwitchSetting((int)value);
         }
     }

     protected void SetSwitchSetting(int value)
     {
         if (value < 0)
         {
             value = 0;
         }
         if (value > 3)
         {
             value = 3;
         }

         level = (MethodTracingSwitchLevel)value;

         outEnter = false;
         if ((value == (int)MethodTracingSwitchLevel.EnteringMethod) ||
             (value == (int)MethodTracingSwitchLevel.Both))
         {
             outEnter = true;
         }

         outExit = false;
         if ((value == (int)MethodTracingSwitchLevel.ExitingMethod) ||
             (value == (int)MethodTracingSwitchLevel.Both))
         {
             outExit = true;
         }
     }

     public bool OutputExit
     {
         get
         {
             return outExit;
         }
     }

     public bool OutputEnter
     {
         get
         {
             return outEnter;
         }
     }
 }
Public Class MyMethodTracingSwitch
    Inherits Switch
    Protected outExit As Boolean
    Protected outEnter As Boolean
    Protected myLevel As MethodTracingSwitchLevel
    
    Public Sub New(displayName As String, description As String)
        MyBase.New(displayName, description)
    End Sub


    Public Property Level() As MethodTracingSwitchLevel
        Get
            Return myLevel
        End Get
        Set
            SetSwitchSetting(CInt(value))
        End Set
    End Property


    Protected Sub SetSwitchSetting(value As Integer)
        If value < 0 Then
            value = 0
        End If
        If value > 3 Then
            value = 3
        End If

        myLevel = CType(value, MethodTracingSwitchLevel)

        outEnter = False
        If value = CInt(MethodTracingSwitchLevel.EnteringMethod) Or _
            value = CInt(MethodTracingSwitchLevel.Both) Then

            outEnter = True
        End If

        outExit = False
        If value = CInt(MethodTracingSwitchLevel.ExitingMethod) Or _
            value = CInt(MethodTracingSwitchLevel.Both) Then

            outExit = True
        End If
    End Sub


    Public ReadOnly Property OutputExit() As Boolean
        Get
            Return outExit
        End Get
    End Property


    Public ReadOnly Property OutputEnter() As Boolean
        Get
            Return outEnter
        End Get
    End Property
End Class

Im folgenden Beispiel wird ein neuer Switch in Mainerstellt.The following example creates a new switch in Main. Er erstellt einen neuen Switch und weist ihm einen Wert zu.It creates a new switch and assigns it a value. Abhängig von den Switcheinstellungen gibt es dann Debugmeldungen für die Eingabe und das belassen der Methode aus.Then, depending on the switch settings, it outputs debugging messages for entering and leaving the method.

public ref class Class1
{
private:

    /* Create an instance of MyMethodTracingSwitch.*/
    static MyMethodTracingSwitch^ mySwitch =
        gcnew MyMethodTracingSwitch( "Methods","Trace entering and exiting method" );

public:
    static void main()
    {
        // Add the console listener to see trace messages as console output
        Trace::Listeners->Add(gcnew ConsoleTraceListener(true));
        Debug::AutoFlush = true;

        // Set the switch level to both enter and exit
        mySwitch->Level = MethodTracingSwitchLevel::Both;

        // Write a diagnostic message if the switch is set to entering.
        Debug::WriteLineIf(mySwitch->OutputEnter, "Entering Main");

        // Insert code to handle processing here...

        // Write another diagnostic message if the switch is set to exiting.
        Debug::WriteLineIf(mySwitch->OutputExit, "Exiting Main");
    }
};
public class Class1
{
    /* Create an instance of MyMethodTracingSwitch.*/
    static MyMethodTracingSwitch mySwitch =
        new MyMethodTracingSwitch("Methods", "Trace entering and exiting method");

    public static void Main()
    {
        // Add the console listener to see trace messages as console output
        Trace.Listeners.Add(new ConsoleTraceListener(true));
        Debug.AutoFlush = true;

        // Set the switch level to both enter and exit
        mySwitch.Level = MethodTracingSwitchLevel.Both;

        // Write a diagnostic message if the switch is set to entering.
        Debug.WriteLineIf(mySwitch.OutputEnter, "Entering Main");

        // Insert code to handle processing here...

        // Write another diagnostic message if the switch is set to exiting.
        Debug.WriteLineIf(mySwitch.OutputExit, "Exiting Main");
    }
}
Public Class Class1
    ' Create an instance of MyMethodTracingSwitch.
    Private Shared mySwitch As New _
        MyMethodTracingSwitch("Methods", "Trace entering and exiting method")

    Public Shared Sub Main()
        ' Add the console listener to see trace messages as console output
        Trace.Listeners.Add(New ConsoleTraceListener(True))
        Debug.AutoFlush = True

        ' Set the switch level to both enter and exit
        mySwitch.Level = MethodTracingSwitchLevel.Both

        ' Write a diagnostic message if the switch is set to entering.
        Debug.WriteLineIf(mySwitch.OutputEnter, "Entering Main")

        ' Insert code to handle processing here...

        ' Write another diagnostic message if the switch is set to exiting.
        Debug.WriteLineIf(mySwitch.OutputExit, "Exiting Main")
    End Sub
End Class

Hinweise

Ein Switch bietet einen effizienten Mechanismus zum Steuern der Ablauf Verfolgung und Debugausgabe mithilfe externer Einstellungen zur Laufzeit.A switch provides an efficient mechanism for controlling tracing and debugging output at run time using external settings. Die Switch-Klasse implementiert das Standardverhalten für Switches, sodass Sie die Switch-Ebene zur Laufzeit ändern können.The Switch class implements default behavior for switches, allowing you to change the switch level at run time.

Diese Klasse ist die Basisklasse für die Klassen BooleanSwitch, SourceSwitch und TraceSwitch.This class is the base class for the BooleanSwitch, SourceSwitch and the TraceSwitch classes. Diese Switches erfüllen die meisten Debugging-und Ablauf Verfolgungs Anforderungen.These switches meet most debugging and tracing needs. Weitere Informationen zu Ablauf Verfolgungs Schaltern finden Sie unter Ablauf Verfolgungs Schalter.For more information about trace switches, see Trace Switches.

Sie müssen die Ablauf Verfolgung oder das Debuggen zur Verwendung eines Schalters aktivierenYou must enable tracing or debugging to use a switch. Die folgende Syntax ist compilerspezifisch.The following syntax is compiler specific. Wenn Sie andere Compiler als C# oder Visual Basic verwenden, finden Sie in der Dokumentation Ihres Compiler weitere Informationen.If you use compilers other than C# or Visual Basic, refer to the documentation for your compiler.

  • Um das Debuggen in C#zu aktivieren, fügen Sie das /d:DEBUG-Flag zur Compilerbefehlszeile hinzu, wenn Sie den Code kompilieren, oder Sie können #define DEBUG am Anfang der Datei hinzufügen.To enable debugging in C#, add the /d:DEBUG flag to the compiler command line when you compile your code, or you can add #define DEBUG to the top of your file. Fügen Sie in Visual Basic der Compilerbefehlszeile das /d:DEBUG=True-Flag hinzu.In Visual Basic, add the /d:DEBUG=True flag to the compiler command line.

  • Wenn Sie die Ablauf Verfolgung C#mit in aktivieren möchten, fügen Sie der Compilerbefehlszeile das /d:TRACE-Flag hinzu, wenn Sie den Code kompilieren, oder fügen Sie #define TRACE am Anfang der Datei hinzu.To enable tracing using in C#, add the /d:TRACE flag to the compiler command line when you compile your code, or add #define TRACE to the top of your file. Fügen Sie in Visual Basic der Compilerbefehlszeile das /d:TRACE=True-Flag hinzu.In Visual Basic, add the /d:TRACE=True flag to the compiler command line.

Um die Ebene des Schalters festzulegen, bearbeiten Sie die Konfigurationsdatei, die dem Namen der Anwendung entspricht.To set the level of your switch, edit the configuration file that corresponds to the name of your application. In dieser Datei können Sie einen Switch hinzufügen und dessen Wert festlegen, einen Switch entfernen oder alle Switches löschen, die zuvor von der Anwendung festgelegt wurden.Within this file, you can add a switch and set its value, remove a switch, or clear all the switches previously set by the application. Die Konfigurationsdatei sollte wie im folgenden Beispiel formatiert sein:The configuration file should be formatted like the following example:

<configuration>  
  <system.diagnostics>  
    <switches>  
      <add name="mySwitch" value="true" />  
    </switches>  
  </system.diagnostics>  
</configuration>  

Dieser Beispiel Konfigurations Abschnitt definiert eine BooleanSwitch, bei der die DisplayName-Eigenschaft auf mySwitch festgelegt ist und der Enabled Wert auf truefestgelegt ist.This example configuration section defines a BooleanSwitch with the DisplayName property set to mySwitch and the Enabled value set to true. In Ihrer Anwendung können Sie den konfigurierten switchwert verwenden, indem Sie eine BooleanSwitch mit dem gleichen Namen erstellen, wie im folgenden Codebeispiel gezeigt.Within your application, you can use the configured switch value by creating a BooleanSwitch with the same name, as shown in the following code example.

private:
    static BooleanSwitch^ boolSwitch = gcnew BooleanSwitch("mySwitch",
        "Switch in config file");

public:
    static void Main( )
    {
        //...
        Console::WriteLine("Boolean switch {0} configured as {1}",
            boolSwitch->DisplayName, ((Boolean^)boolSwitch->Enabled)->ToString());
        if (boolSwitch->Enabled)
        {
            //...
        }
    }
private static BooleanSwitch boolSwitch = new BooleanSwitch("mySwitch",
    "Switch in config file");

public static void Main( )
{
    //...
    Console.WriteLine("Boolean switch {0} configured as {1}",
        boolSwitch.DisplayName, boolSwitch.Enabled.ToString());
    if (boolSwitch.Enabled)
    {
        //...
    }
}

Hinweise für Ausführende

Wenn Sie Ablauf Verfolgungs Ebenen oder Mechanismen zum Festlegen von switchebenen benötigen, die von BooleanSwitch, SourceSwitch und TraceSwitchunterscheiden, können Sie von Switcherben.If you need trace levels, or mechanisms for setting switch levels different from those provided by BooleanSwitch, SourceSwitch and TraceSwitch, you can inherit from Switch. Wenn Sie von dieser Klasse erben, müssen Sie die SwitchSetting-Methode implementieren.When inheriting from this class, you must implement the SwitchSetting method.

Konstruktoren

Switch(String, String)

Initialisiert eine neue Instanz der Switch-Klasse.Initializes a new instance of the Switch class.

Switch(String, String, String)

Initialisiert eine neue Instanz der Switch-Klasse und gibt den Anzeigenamen, die Beschreibung und den Standardwert für den Schalter an.Initializes a new instance of the Switch class, specifying the display name, description, and default value for the switch.

Eigenschaften

Attributes

Ruft die benutzerdefinierten Schalterattribute ab, die in der Anwendungskonfigurationsdatei definiert sind.Gets the custom switch attributes defined in the application configuration file.

Description

Ruft eine Beschreibung des Schalters ab.Gets a description of the switch.

DisplayName

Ruft einen Namen zum Bezeichnen des Schalters ab.Gets a name used to identify the switch.

SwitchSetting

Ruft die aktuelle Einstellung des Schalters ab oder legt diese fest.Gets or sets the current setting for this switch.

Value

Ruft den Wert des Schalters ab oder legt diesen fest.Gets or sets the value of the switch.

Methoden

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.Determines whether the specified object is equal to the current object.

(Geerbt von Object)
GetHashCode()

Dient als die Standard-HashfunktionServes as the default hash function.

(Geerbt von Object)
GetSupportedAttributes()

Ruft die benutzerdefinierten Attribute ab, die vom Schalter unterstützt werden.Gets the custom attributes supported by the switch.

GetType()

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

(Geerbt von Object)
OnSwitchSettingChanged()

Wird aufgerufen, wenn die SwitchSetting-Eigenschaft geändert wird.Invoked when the SwitchSetting property is changed.

OnValueChanged()

Wird aufgerufen, wenn die Value-Eigenschaft geändert wird.Invoked when the Value property is changed.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

(Geerbt von Object)

Gilt für:

Siehe auch