Switch Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Fornisce una classe base astratta per creare nuovi commutatori di debug e traccia.
public ref class Switch abstract
public abstract class Switch
type Switch = class
Public MustInherit Class Switch
- Ereditarietà
-
Switch
- Derivato
Esempio
Nell'esempio seguente viene illustrato come definire una nuova Switch classe con quattro livelli di traccia che possono essere usati per tracciare uno stack di chiamate. È possibile usare l'opzione per instrumentare l'applicazione per registrare ogni volta che il metodo viene immesso o chiuso.
Il primo esempio crea l'enumerazione utilizzata per impostare il livello dell'opzione.
// 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
Nell'esempio seguente viene creata la nuova opzione. Il codice implementa una Level proprietà per impostare il valore della nuova opzione.
Level chiama la proprietà SwitchSetting protetta che assegna il valore al nuovo commutatore. In questo esempio vengono implementate anche due proprietà valutatori per ottenere il valore assegnato dell'opzione.
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
Nell'esempio seguente viene creata una nuova opzione in Main. Crea un nuovo commutatore e lo assegna a un valore. Quindi, a seconda delle impostazioni del commutatore, restituisce messaggi di debug per l'immissione e l'uscita del metodo.
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
Commenti
Un commutatore fornisce un meccanismo efficiente per controllare l'output di traccia e debug in fase di esecuzione usando le impostazioni esterne. La Switch classe implementa il comportamento predefinito per le opzioni, consentendo di modificare il livello di cambio in fase di esecuzione.
Questa classe è la classe di base per le BooleanSwitchclassi , SourceSwitche TraceSwitch . Queste opzioni soddisfano la maggior parte delle esigenze di debug e traccia. Per altre informazioni sulle opzioni di traccia, vedere Opzioni di traccia.
È necessario abilitare la traccia o il debug per usare un'opzione. La sintassi seguente è specifica del compilatore. Se si usano compilatori diversi da C# o Visual Basic, vedere la documentazione per il compilatore.
Per abilitare il debug in C#, aggiungere il
/d:DEBUGflag alla riga di comando del compilatore durante la compilazione del codice oppure aggiungere#define DEBUGall'inizio del file. In Visual Basic aggiungere il/d:DEBUG=Trueflag alla riga di comando del compilatore.Per abilitare la traccia usando in C#, aggiungere il
/d:TRACEflag alla riga di comando del compilatore quando si compila il codice o aggiungerlo#define TRACEall'inizio del file. In Visual Basic aggiungere il/d:TRACE=Trueflag alla riga di comando del compilatore.
Per impostare il livello del commutatore in un'app .NET Framework, modificare il file di configurazione corrispondente al nome dell'applicazione. All'interno di questo file è possibile aggiungere un'opzione e impostarne il valore, rimuovere un'opzione o cancellare tutte le opzioni impostate in precedenza dall'applicazione. Il file di configurazione deve essere formattato come nell'esempio seguente:
<configuration>
<system.diagnostics>
<switches>
<add name="mySwitch" value="true" />
</switches>
</system.diagnostics>
</configuration>
Questa sezione di configurazione di esempio definisce un BooleanSwitch oggetto con la DisplayName proprietà impostata su mySwitch e il Enabled valore impostato su true. All'interno dell'applicazione è possibile usare il valore dell'opzione configurato creando un BooleanSwitch oggetto con lo stesso nome, come illustrato nell'esempio di codice seguente.
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)
{
//...
}
}
Note per gli implementatori
Se sono necessari livelli di traccia o meccanismi per impostare livelli di cambio diversi da quelli forniti da BooleanSwitchSourceSwitch e TraceSwitch, è possibile ereditare da Switch. Quando eredita da questa classe, è necessario implementare il SwitchSetting metodo .
Costruttori
| Nome | Descrizione |
|---|---|
| Switch(String, String, String) |
Inizializza una nuova istanza della Switch classe , specificando il nome visualizzato, la descrizione e il valore predefinito per l'opzione. |
| Switch(String, String) |
Inizializza una nuova istanza della classe Switch. |
Proprietà
| Nome | Descrizione |
|---|---|
| Attributes |
Ottiene gli attributi del commutatore personalizzato definiti nel file di configurazione dell'applicazione. |
| DefaultValue |
Ottiene il valore predefinito assegnato nel costruttore. |
| Description |
Ottiene una descrizione dell'opzione. |
| DisplayName |
Ottiene un nome utilizzato per identificare l'opzione. |
| SwitchSetting |
Ottiene o imposta l'impostazione corrente per questa opzione. |
| Value |
Ottiene o imposta il valore dell'opzione. |
Metodi
| Nome | Descrizione |
|---|---|
| Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
| GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
| GetSupportedAttributes() |
Ottiene gli attributi personalizzati supportati dall'opzione. |
| GetType() |
Ottiene il Type dell'istanza corrente. (Ereditato da Object) |
| MemberwiseClone() |
Crea una copia superficiale del Objectcorrente. (Ereditato da Object) |
| OnSwitchSettingChanged() |
Richiamato quando la SwitchSetting proprietà viene modificata. |
| OnValueChanged() |
Richiamato quando la Value proprietà viene modificata. |
| Refresh() |
Aggiorna i dati di configurazione della traccia. |
| ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
Eventi
| Nome | Descrizione |
|---|---|
| Initializing |
Si verifica quando un oggetto Switch deve essere inizializzato. |