Using Switches to Control Debug and Trace:User-Defined Switch
// compile with: csc /r:system.dll file_1.cs
using System;
using System.Diagnostics;
enum SpecialSwitchLevel
{
Mute = 0,
Terse = 1,
Verbose = 2,
Chatty = 3
}
class SpecialSwitch: Switch
{
public SpecialSwitch(string displayName, string description) :
base(displayName, description)
{
}
public SpecialSwitchLevel Level
{
get
{
return((SpecialSwitchLevel) base.SwitchSetting);
}
set
{
base.SwitchSetting = (int) value;
}
}
public bool Mute
{
get
{
return(base.SwitchSetting == 0);
}
}
public bool Terse
{
get
{
return(base.SwitchSetting >= (int) (SpecialSwitchLevel.Terse));
}
}
public bool Verbose
{
get
{
return(base.SwitchSetting >= (int) SpecialSwitchLevel.Verbose);
}
}
public bool Chatty
{
get
{
return(base.SwitchSetting >=(int) SpecialSwitchLevel.Chatty);
}
}
protected new int SwitchSetting
{
get
{
return((int) base.SwitchSetting);
}
set
{
if (value < 0)
value = 0;
if (value > 4)
value = 4;
base.SwitchSetting = value;
}
}
}
class MyClass
{
public MyClass(int i)
{
this.i = i;
}
[Conditional("DEBUG")]
public void VerifyState()
{
Console.WriteLine("VerifyState");
Debug.WriteLineIf(debugOutput.Terse, "VerifyState Start");
Debug.WriteLineIf(debugOutput.Chatty,
"Starting field verification");
if (debugOutput.Verbose)
Debug.WriteLine("VerifyState End");
}
static SpecialSwitch debugOutput =
new SpecialSwitch("MyClassDebugOutput", "application");
int i = 0;
}
public class TraceUserDefinedSwitch
{
public static void Main()
{
//TraceSwitch ts = new TraceSwitch("MyClassDebugOutput", "application");
//Console.WriteLine("TraceSwitch: {0}", ts.Level);
Debug.Listeners.Clear();
Debug.Listeners.Add(new TextWriterTraceListener(Console.Out));
MyClass c = new MyClass(1);
c.VerifyState();
}
}
Related examples in the same category