Switch Kelas

Definisi

Menyediakan kelas dasar abstrak untuk membuat sakelar penelusuran kesalahan dan pelacakan baru.

public ref class Switch abstract
public abstract class Switch
type Switch = class
Public MustInherit Class Switch
Warisan
Switch
Turunan

Contoh

Contoh berikut menunjukkan cara menentukan kelas baru Switch dengan empat tingkat pelacakan yang dapat digunakan untuk melacak tumpukan panggilan. Anda dapat menggunakan sakelar untuk melengkapi aplikasi Anda untuk mencatat setiap kali metode dimasukkan atau keluar.

Contoh pertama membuat enumerasi yang digunakan untuk mengatur tingkat sakelar.

// The following are possible values for the new switch.
public enum class 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,
}
' The following are possible values for the new switch.
Public Enum MethodTracingSwitchLevel
    Off = 0
    EnteringMethod = 1
    ExitingMethod = 2
    Both = 3
End Enum 'MethodTracingSwitchLevel

Contoh berikut membuat sakelar baru. Kode mengimplementasikan Level properti untuk mengatur nilai sakelar baru. Level memanggil properti SwitchSetting terproteksi yang menetapkan nilai ke sakelar baru. Contoh ini juga mengimplementasikan dua properti penilai untuk mendapatkan nilai sakelar yang ditetapkan.

public ref class MyMethodTracingSwitch: public Switch
{
protected:
    bool outExit;
    bool outEnter;
    MethodTracingSwitchLevel level;

public:
    MyMethodTracingSwitch( String^ displayName, String^ description )
       : Switch( displayName, description )
    {}

    property MethodTracingSwitchLevel Level
    {
        MethodTracingSwitchLevel get()
        {
            return level;
        }

       void set( 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 OutputExit
    {
        bool get()
        {
            return outExit;
        }
    }

    property bool OutputEnter
    {
        bool get()
        {
            return outEnter;
        }
    }
};
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

Contoh berikut membuat sakelar baru di Main. Ini membuat sakelar baru dan menetapkan nilai. Kemudian, tergantung pada pengaturan pengalihan, ini menghasilkan pesan debugging untuk memasukkan dan meninggalkan metode .

public ref class Class1
{
private:

    /* Create an instance of MyMethodTracingSwitch.*/
    static MyMethodTracingSwitch^ mySwitch =
        gcnew 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(gcnew 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.*/
    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

Keterangan

Sakelar menyediakan mekanisme yang efisien untuk mengontrol output pelacakan dan penelusuran kesalahan pada durasi menggunakan pengaturan eksternal. Kelas Switch menerapkan perilaku default untuk sakelar, memungkinkan Anda mengubah tingkat sakelar pada durasi.

Kelas ini adalah kelas dasar untuk BooleanSwitchkelas , , SourceSwitchdan TraceSwitch . Sakelar ini memenuhi sebagian besar kebutuhan penelusuran kesalahan dan pelacakan. Untuk informasi selengkapnya tentang sakelar pelacakan, lihat Sakelar Pelacakan.

Anda harus mengaktifkan pelacakan atau penelusuran kesalahan untuk menggunakan sakelar. Sintaks berikut adalah kompilator spesifik. Jika Anda menggunakan pengkompilasi selain C# atau Visual Basic, lihat dokumentasi untuk pengkompilasi Anda.

  • Untuk mengaktifkan penelusuran kesalahan di C#, tambahkan /d:DEBUG bendera ke baris perintah pengkompilasi saat Mengkompilasi kode, atau Anda dapat menambahkan #define DEBUG ke bagian atas file Anda. Di Visual Basic, tambahkan /d:DEBUG=True bendera ke baris perintah pengkompilasi.

  • Untuk mengaktifkan pelacakan menggunakan di C#, tambahkan /d:TRACE bendera ke baris perintah pengkompilasi saat Anda mengkompilasi kode, atau menambahkan #define TRACE ke bagian atas file Anda. Di Visual Basic, tambahkan /d:TRACE=True bendera ke baris perintah pengkompilasi.

Untuk mengatur tingkat pengalihan Anda di aplikasi .NET Framework, edit file konfigurasi yang sesuai dengan nama aplikasi Anda. Dalam file ini, Anda dapat menambahkan sakelar dan mengatur nilainya, menghapus sakelar, atau menghapus semua sakelar yang sebelumnya diatur oleh aplikasi. File konfigurasi harus diformat seperti contoh berikut:

<configuration>  
  <system.diagnostics>  
    <switches>  
      <add name="mySwitch" value="true" />  
    </switches>  
  </system.diagnostics>  
</configuration>  

Bagian konfigurasi contoh ini menentukan BooleanSwitch dengan properti yang DisplayName diatur ke mySwitch dan nilai diatur Enabled ke true. Dalam aplikasi, Anda dapat menggunakan nilai sakelar yang dikonfigurasi dengan membuat BooleanSwitch dengan nama yang sama, seperti yang ditunjukkan dalam contoh kode berikut.

private:
    static BooleanSwitch^ boolSwitch = gcnew BooleanSwitch("mySwitch",
        "Switch in config file");

public:
    static void Main( )
    {
        //...
        Console::WriteLine("Boolean switch {0} configured as {1}",
            boolSwitch->DisplayName, ((Boolean^)boolSwitch->Enabled)->ToString());
        if (boolSwitch->Enabled)
        {
            //...
        }
    }
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)
    {
        //...
    }
}

Catatan Bagi Implementer

Jika Anda memerlukan tingkat pelacakan, atau mekanisme untuk mengatur tingkat pengalihan yang berbeda dari yang disediakan oleh BooleanSwitch, SourceSwitch dan TraceSwitch, Anda dapat mewarisi dari Switch. Saat mewarisi dari kelas ini, Anda harus menerapkan metode .SwitchSetting

Konstruktor

Switch(String, String)

Menginisialisasi instans baru kelas Switch.

Switch(String, String, String)

Menginisialisasi instans Switch baru kelas, menentukan nama tampilan, deskripsi, dan nilai default untuk sakelar.

Properti

Attributes

Mendapatkan atribut sakelar kustom yang ditentukan dalam file konfigurasi aplikasi.

DefaultValue

Mendapatkan nilai default yang ditetapkan di konstruktor.

Description

Mendapatkan deskripsi sakelar.

DisplayName

Mendapatkan nama yang digunakan untuk mengidentifikasi sakelar.

SwitchSetting

Mendapatkan atau menyetel pengaturan saat ini untuk sakelar ini.

Value

Mendapatkan atau mengatur nilai sakelar.

Metode

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetSupportedAttributes()

Mendapatkan atribut kustom yang didukung oleh sakelar.

GetType()

Mendapatkan instans Type saat ini.

(Diperoleh dari Object)
MemberwiseClone()

Membuat salinan dangkal dari yang saat ini Object.

(Diperoleh dari Object)
OnSwitchSettingChanged()

Dipanggil saat SwitchSetting properti diubah.

OnValueChanged()

Dipanggil saat Value properti diubah.

Refresh()

Merefresh data konfigurasi pelacakan.

ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Acara

Initializing

Terjadi ketika Switch perlu diinisialisasi.

Berlaku untuk

Lihat juga