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 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
В следующем примере создается новый параметр . Код реализует Level
свойство для задания значения нового параметра. Level
вызывает защищенное свойство SwitchSetting , которое присваивает значение новому коммутатору. В этом примере также реализуются два свойства оценчика для получения назначенного значения переключателя.
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
В следующем примере создается новый параметр в Main
. Он создает новый параметр и присваивает ему значение. Затем, в зависимости от параметров переключателя, он выводит сообщения отладки для ввода метода и выхода из него.
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
Комментарии
Коммутатор предоставляет эффективный механизм для управления трассировкой и отладкой выходных данных во время выполнения с помощью внешних параметров. Класс Switch реализует поведение по умолчанию для коммутаторов, что позволяет изменять уровень коммутатора во время выполнения.
Этот класс является базовым классом BooleanSwitchдля классов , SourceSwitchи TraceSwitch . Эти параметры соответствуют большинству потребностей отладки и трассировки. Дополнительные сведения о переключателях трассировки см. в разделе Переключатели трассировки.
Для использования переключателя необходимо включить трассировку или отладку. Следующий синтаксис зависит от компилятора. Если вы используете компиляторы, отличные от C# или Visual Basic, обратитесь к документации по компилятору.
Чтобы включить отладку
/d:DEBUG
в C#, добавьте флаг в командную строку компилятора при компиляции кода или добавьте#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>
В этом примере раздела конфигурации определяется со свойством BooleanSwitchDisplayName , для свойства задано значение mySwitch
, а Enabled для параметра — true
значение . В приложении можно использовать настроенное значение переключателя, создав BooleanSwitch с тем же именем, как показано в следующем примере кода.
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)
{
//...
}
}
Примечания для тех, кто реализует этот метод
Если требуются уровни трассировки или механизмы для задания уровней коммутатора, отличных от уровней, предоставляемых BooleanSwitch, SourceSwitch и TraceSwitch, можно наследовать от Switch. При наследовании от этого класса необходимо реализовать SwitchSetting метод .
Конструкторы
Switch(String, String) |
Инициализирует новый экземпляр класса Switch. |
Switch(String, 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 . |