Switch クラス
新しいデバッグ スイッチおよびトレース スイッチを作成するための抽象 (Visual Basic では MustInherit) 基本クラスを提供します。
この型のすべてのメンバの一覧については、Switch メンバ を参照してください。
System.Object
System.Diagnostics.Switch
System.Diagnostics.BooleanSwitch
System.Diagnostics.TraceSwitch
MustInherit Public Class Switch
[C#]
public abstract class Switch
[C++]
public __gc __abstract class Switch
[JScript]
public abstract class Switch
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
スイッチは、外部設定を使用して、実行時にトレース出力やデバッグ出力を制御するための効率的な機構を提供します。 Switch クラスは、スイッチの既定の動作を実装します。スイッチ レベルは、実行時に変更できます。
このクラスは、 BooleanSwitch クラスおよび TraceSwitch クラスの基本クラスです。これらのスイッチで、ほとんどのデバッグおよびトレースの要件を満たすことができます。スイッチを作成する場合は、スイッチを静的 (Visual Basic では Shared) に設定する必要があります。
スイッチを使用するには、トレースまたはデバッグを有効にする必要があります。次の構文はコンパイラに固有です。C# または Visual Basic 以外のコンパイラを使用する場合は、使用するコンパイラのドキュメントを参照してください。
- C# でデバッグを有効にするには、コードのコンパイル時に /d:DEBUG フラグをコンパイラのコマンド ラインに追加するか、 #define DEBUG をファイルの最上部に挿入します。Visual Basic では、コンパイラのコマンド ラインに /d:DEBUG=True フラグを追加します。
- C# でトレースを有効にするには、コードのコンパイル時に /d:TRACE フラグをコンパイラのコマンド ラインに追加するか、 #define TRACE をファイルの最上部に挿入します。Visual Basic では、コンパイラのコマンド ラインに /d:TRACE=True フラグを追加します。
スイッチのレベルを設定するには、アプリケーションの名前に対応する構成ファイルを編集します。このファイルでは、スイッチの追加、その値の設定、スイッチの削除、アプリケーションで以前設定されたすべてのスイッチのクリアを実行できます。構成ファイルの書式は次の例のようになります。
<configuration>
<system.diagnostics>
<switches>
<add name="mySwitch" value="10" />
<add name="myNewSwitch" value="20" />
<remove name="mySwitch" />
<clear/>
</switches>
</system.diagnostics>
</configuration>
メモ パフォーマンス向上のため、クラスで Switch メンバを静的 (Visual Basic では Shared) にできます。
継承時の注意: トレース レベルや、 BooleanSwitch および TraceSwitch によって提供されるものとは異なるスイッチ レベルを設定するための機構が必要な場合は、 Switch から継承します。このクラスから継承するときは、 SwitchSetting メソッドを実装する必要があります。
使用例
[Visual Basic, C#, C++] コール スタックのトレースに使用できる 4 段階のトレース レベルを持つ新しい Switch クラスを定義する方法の例を次に示します。このスイッチを使用すると、メソッドが呼び出されるたび、またはメソッドから制御が戻るたびに、アプリケーションでログを作成できます。
[Visual Basic, C#, C++] 最初の例では、スイッチのレベルを設定するために使用する列挙体を作成します。
' The following are possible values for the new switch.
Public Enum MethodTracingSwitchLevel
Off = 0
EnteringMethod = 1
ExitingMethod = 2
Both = 3
End Enum 'MethodTracingSwitchLevel
[C#]
// The following are possible values for the new switch.
public enum MethodTracingSwitchLevel {
Off = 0,
EnteringMethod = 1,
ExitingMethod = 2,
Both = 3,
}
[C++]
// The following are possible values for the new switch.
public __value enum MethodTracingSwitchLevel {
Off = 0,
EnteringMethod = 1,
ExitingMethod = 2,
Both = 3,
};
[Visual Basic, C#, C++] 新しいスイッチを作成する例を次に示します。このコードは、新しいスイッチの値を設定する Level
プロパティを実装します。 Level
は、新しいスイッチに値を割り当てるプロテクト プロパティ SwitchSetting を呼び出します。また、この例では、スイッチに代入した値を取得する 2 つのアクセサ プロパティも実装します。
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 'New
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 'SetSwitchSetting
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 'MyMethodTracingSwitch
[C#]
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;
}
}
}
[C++]
public __gc class MyMethodTracingSwitch:public Switch {
protected:
bool outExit;
bool outEnter;
MethodTracingSwitchLevel level;
public:
MyMethodTracingSwitch(String* displayName, String* description): Switch(displayName, description){
}
__property MethodTracingSwitchLevel get_Level(){
return level;
}
__property void set_Level( 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 get_OutputExit(){
return outExit;
}
__property bool get_OutputEnter(){
return outEnter;
}
};
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()
' Write a diagnostic message if the switch is set to entering.
Debug.WriteLineIf(mySwitch.OutputEnter, "Entering Main")
' Insert code to handle processing.
' Write another diagnostic message if the switch is set to exiting.
Debug.WriteLineIf(mySwitch.OutputExit, "Exiting Main")
End Sub
End Class 'MyClass
[C#]
public class MyClass {
/* Create an instance of MyMethodTracingSwitch.*/
static MyMethodTracingSwitch mySwitch =
new MyMethodTracingSwitch("Methods", "Trace entering and exiting method");
public static int Main(string[] args) {
// Write a diagnostic message if the switch is set to entering.
Debug.WriteLineIf(mySwitch.OutputEnter, "Entering Main");
// Insert code to handle processing.
// Write another diagnostic message if the switch is set to exiting.
Debug.WriteLineIf(mySwitch.OutputExit, "Exiting Main");
return 0;
}
}
[C++]
public __gc class MyClass {
/* Create an instance of MyMethodTracingSwitch.*/
static MyMethodTracingSwitch* mySwitch =
new MyMethodTracingSwitch(S"Methods", S"Trace entering and exiting method");
public:
static int main() {
// Write a diagnostic message if the switch is set to entering.
Debug::WriteLineIf(mySwitch->OutputEnter, S"Entering Main");
// Insert code to handle processing.
// Write another diagnostic message if the switch is set to exiting.
Debug::WriteLineIf(mySwitch->OutputExit, S"Exiting Main");
return 0;
}
};
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.Diagnostics
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
アセンブリ: System (System.dll 内)
参照
Switch メンバ | System.Diagnostics 名前空間 | BooleanSwitch | TraceSwitch | Debug | Trace