The Switch Class in C#

In this article I will explain you about the Switch Class in C#.


This article has been excerpted from book "The Complete Visual C# Programmer's Guide" from the Authors of C# Corner.

A trace switch is a way to control tracing and debugging output at runtime using various settings. The Switch class is the parent of the BooleanSwitch and TraceSwitch classes. Despite our being able to derive and create custom switches, the BooleanSwitch and TraceSwitch classes will be satisfactory for our debugging and tracing needs. Table 21.4 describes two members of the Switch class. 

table21.4.gif

Table 21.4: Switch Class Members 

The TraceSwitch class provides per assembly, per module, or per class tracing. This is more powerful and easier than the single-trace options because it lets you specify various output options at once. Therefore, the extreme debugging or tracing outputs do not overwhelm us with the various options that we have specified when we don't want them. Table 21.5 describes members of the TraceSwitch class. The TraceSwitch constructor takes two parameters: the descriptive display name ("descriptive trace switch name") and the switch name. 

table21.5.gif

Table 21.5: TraceSwitch Class Members 

We generally define the switches for the executable in the EXE.CONFIG configuration file (see Listing 21.10). The application configuration file name is <program>. Inside switch elements of the XML file, the "name" attribute refers to the switch name and the "value" attribute is the numerical value the corresponding trace level is set to. Note that we can also define the autoflush and the indent size parameters in the configuration file. 

Listing 21.10: Switches defined in the EXE.CONFIG file 

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
  <system.diagnostics>
    <switches>
      <add name="Switch1" value="3" />
      <add name="Switch2" value="2" />
    </switches>
    <!—additional diagnostics -->
    <trace autoflush="true" indentsize="3" />
  </system.diagnostics>
</configuration>

Each assembly should have its own trace switch. 

Possible TraceSwitch tracing levels are as follows:

  • 0-None
  • 1-Errors only; TraceError
  • 2-Warning (warnings and errors); TraceWarning
  • 3-Info (warnings, errors, and information); TraceInfo
  • 4-Verbose (all kinds of traces); TraceVerbose

An example is shown in Listing 21.11. 

Listing 21.11: Using TraceSwitch 

            TraceSwitch MySwitch = new MySwitch("Switch1", "my switch1 at Info mode");

            // do you see which one will run?
            Trace.WriteLineIf(MySwitch.TraceError,
            "Error tracing is on!");
            Trace.WriteLineIf(MySwitch.TraceWarning,
            "Warning tracing is on!");
            Trace.WriteLineIf(MySwitch.TraceInfo,
            "Info tracing is on!");
            Trace.WriteLineIf(MySwitch.TraceVerbose, "VerboseSwitching is on!");

Boolean switches can be used as a switch in your code to either turn on or turn off the printing of a debug statement. Possible BooleanSwitch tracing levels are as follows:

  • 0-False; Disabled
  • 1-True; Enabled

In Listing 21.12 we enable the Boolean switch in the XML-formatted application configuration file. 

Listing 21.12-Enabling a Boolean switch in the EXE.CONFIG 

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
  <system.diagnostics>
    <switches>
      <add name="Switch3" value="1" />
    </switches>
    <!—additional diagnostic settings -->
    <trace autoflush="true" indentsize="5" />
  </system.diagnostics>
</configuration>

The BooleanSwitch example in Listing 21.13 is set to the Verbose mode. 

Listing 21.13: Using BoolSwitch 

            BooleanSwitch boolSwitch = new BooleanSwitch("Switch3", "my boolean switch");
            Debug.WriteLine("DEBUG");
            Trace.WriteLine("TRACE");
            Trace.WriteLineIf(boolSwitch.Enabled, "boolSwitch");

We can also derive custom switch classes from the Switch class but generally do not need to do so. 

Conclusion

Hope this article would have helped you in understanding the Switch Class in C#. See other articles on the website on .NET and C#.

visual C-sharp.jpg
The Complete Visual C# Programmer's Guide covers most of the major components that make up C# and the .net environment. The book is geared toward the intermediate programmer, but contains enough material to satisfy the advanced developer.