Поделиться через


Switch Класс

Определение

Предоставляет абстрактный базовый класс для создания новых коммутаторов отладки и трассировки.

public ref class Switch abstract
public abstract class Switch
type Switch = class
Public MustInherit Class Switch
Наследование
Switch
Производный

Примеры

В следующем примере показано, как определить новый Switch класс с четырьмя уровнями трассировки, которые можно использовать для трассировки стека вызовов. Вы можете использовать параметр для инструментирования приложения для регистрации при каждом вводе или выходе метода.

В первом примере создается перечисление, используемое для задания уровня коммутатора.

// 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

В следующем примере создается новый коммутатор. Код реализует Level свойство для задания значения нового коммутатора. Level вызывает защищенное свойство SwitchSetting , которое назначает значение новому коммутатору. В этом примере также реализованы два свойства оценчика, чтобы получить назначенное значение коммутатора.

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

В следующем примере создается новый коммутатор 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

Комментарии

Коммутатор предоставляет эффективный механизм управления отслеживанием и отладкой выходных данных во время выполнения с помощью внешних параметров. Класс Switch реализует поведение по умолчанию для коммутаторов, что позволяет изменять уровень коммутатора во время выполнения.

Этот класс является базовым классом для BooleanSwitchклассов и SourceSwitchTraceSwitch классов. Эти коммутаторы соответствуют большинству потребностей отладки и трассировки. Дополнительные сведения о параметрах трассировки см. в разделе "Коммутаторы трассировки".

Для использования коммутатора необходимо включить трассировку или отладку. Следующий синтаксис является определенным компилятором. Если вы используете компиляторы, отличные от C# или Visual Basic, обратитесь к документации для компилятора.

  • Чтобы включить отладку в C#, добавьте /d:DEBUG флаг в командную строку компилятора при компиляции кода или добавьте #define DEBUG в начало файла. В Visual Basic добавьте /d:DEBUG=True флаг в командную строку компилятора.

  • Чтобы включить трассировку с помощью C#, добавьте /d:TRACE флаг в командную строку компилятора при компиляции кода или добавьте #define TRACE в начало файла. В Visual Basic добавьте /d:TRACE=True флаг в командную строку компилятора.

Чтобы задать уровень коммутатора в приложении .NET Framework, измените файл конфигурации, соответствующий имени приложения. В этом файле можно добавить переключатель и задать его значение, удалить переключатель или очистить все ранее заданные приложением коммутаторы. Файл конфигурации должен быть отформатирован следующим образом:

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

В этом примере раздела конфигурации определяется BooleanSwitch свойство с набором mySwitchDisplayName свойств и значением, равным Enabledtrue. В приложении можно использовать настроенное значение коммутатора, создав BooleanSwitch имя с тем же именем, как показано в следующем примере кода.

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)
    {
        //...
    }
}

Примечания для тех, кто реализует этот метод

Если вам нужны уровни трассировки или механизмы для настройки уровней переключения, отличных от уровней, предоставляемых BooleanSwitchимиTraceSwitchSourceSwitch, можно наследовать от Switch. При наследовании от этого класса необходимо реализовать SwitchSetting метод.

Конструкторы

Имя Описание
Switch(String, String, String)

Инициализирует новый экземпляр Switch класса, указывая отображаемое имя, описание и значение по умолчанию для коммутатора.

Switch(String, String)

Инициализирует новый экземпляр класса Switch.

Свойства

Имя Описание
Attributes

Возвращает настраиваемые атрибуты коммутатора, определенные в файле конфигурации приложения.

DefaultValue

Возвращает значение по умолчанию, назначенное конструктором.

Description

Возвращает описание переключателя.

DisplayName

Возвращает имя, используемое для идентификации коммутатора.

SwitchSetting

Возвращает или задает текущий параметр для этого параметра.

Value

Возвращает или задает значение коммутатора.

Методы

Имя Описание
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetSupportedAttributes()

Возвращает настраиваемые атрибуты, поддерживаемые параметром.

GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
OnSwitchSettingChanged()

Вызывается при SwitchSetting изменении свойства.

OnValueChanged()

Вызывается при Value изменении свойства.

Refresh()

Обновляет данные конфигурации трассировки.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

События

Имя Описание
Initializing

Происходит при Switch инициализации.

Применяется к

См. также раздел