Switch 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供一个用于创建新的调试和跟踪开关的抽象基类。
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 实现开关的默认行为,允许在运行时更改交换机级别。
此类是 、 SourceSwitch和 TraceSwitch 类的BooleanSwitch基类。 这些开关满足大多数调试和跟踪需求。 有关跟踪开关的详细信息,请参阅 跟踪开关。
必须启用跟踪或调试才能使用开关。 以下语法特定于编译器。 如果使用 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>
此示例配置部分定义了 ,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)
{
//...
}
}
实施者说明
如果需要跟踪级别或机制来设置与 和 BooleanSwitchSourceSwitchTraceSwitch提供的不同级别的开关级别,可以从 继承。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 发生。 |