Mega Code Archive

 
Categories / C# / Development Class
 

Using Switches to Control Debug and Trace

// 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();     } }