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 инициализации. |