Cara melaksanakan kelas pengecualian khusus di C #

Pengecualian adalah kesalahan yang berlaku pada waktu runtime dan menghentikan aliran normal pelaksanaan program jika tidak ditangani dengan baik. Apabila pengecualian berlaku, anda mungkin tidak mahu mendedahkan jejak timbunan sebenar atau mesej pengecualian kepada pengguna. Pengecualian khusus dapat digunakan untuk menambahkan maklumat yang jelas, bermakna, dan ramah pengguna kepada pengecualian ketika kesalahan berlaku semasa program anda berjalan.

Kelas asas untuk semua pengecualian dalam. Net adalah Exception. Semua kelas dalam hierarki pengecualian berasal secara langsung atau tidak langsung dari kelas ini. Perhatikan bahawa System.ApplicationExceptiondan System.SystemExceptionkelas memperluas System.Exceptionkelas, yang seterusnya berasal dari System.Objectkelas. Perhatikan bahawa pengecualian sama seperti jenis lain di .Net.

ApplicationException vs System.Exception

Untuk membuat kelas pengecualian tersuai, anda harus menentukan jenisnya. Semasa merancang kelas pengecualian khusus, anda harus memperoleh kelas anda dari System.Exceptiondan bukan dari ApplicationException. ApplicationExceptionpada asalnya dimaksudkan untuk digunakan untuk membuat pengecualian yang ditentukan pengguna, tetapi menggunakannya tidak lagi dianjurkan. Seperti yang dinyatakan oleh dokumentasi Microsoft: 

Anda harus memperoleh pengecualian khas dari  Exception kelas daripada  ApplicationException kelas. Anda tidak boleh membuang  ApplicationException pengecualian dalam kod anda, dan anda tidak boleh membuat  ApplicationException pengecualian kecuali anda bermaksud membuang semula pengecualian yang asal.

Alasannya ApplicationExceptiontidak digunakan lagi adalah bahawa menggunakannya secara tidak perlu memperluas hierarki pengecualian. Walaupun ApplicationExceptionkelas meluaskan Exceptionkelas, ia tidak menambah fungsi baru. Satu-satunya tujuannya adalah untuk menyediakan cara untuk membezakan antara pengecualian yang ditentukan oleh aplikasi dan pengecualian yang ditentukan oleh sistem.  

Merancang kelas pengecualian khusus

Sekarang mari kita menggali beberapa kod. Coretan kod berikut menunjukkan bagaimana anda boleh mula membuat kelas pengecualian khusus di C # dengan menurunkan System.Exceptionkelas. Perhatikan bahawa anda harus memberikan nama yang bermakna untuk kelas pengecualian tersuai anda. Dalam contoh ini, kami akan membuat kelas pengecualian khusus yang dinamakan LoginException, yang dapat digunakan untuk menjebak kesalahan yang mungkin berlaku ketika pengguna log masuk ke sistem, misalnya, jika kelayakan pengguna tidak betul.

kelas awam LoginException: System.Exception

    {

       // TODO

    }

Penyenaraian kod berikut menunjukkan kelas pengecualian khusus kami dengan pembangun lalai dan argumen dilaksanakan.

kelas awam LoginException: System.Exception

    {

        ///

        /// Pembina lalai

        ///

        LoginException awam (): asas ()

        {

        }

        ///

        /// Pembina hujah

        ///

        /// Ini adalah keterangan pengecualian

        LoginException umum (Mesej rentetan): asas (mesej)

        {

        }

        ///

        /// Pembina hujah dengan pengecualian dalaman

        ///

        /// Ini adalah keterangan pengecualian

        /// Pengecualian dalaman

        Login awam Exception (String message, Exception innerException): asas (message, innerException)

        {

        }

        ///

        /// Pembina hujah dengan sokongan siri

        ///

        /// Contoh SerializationInfo

        /// Contoh StreamingContext

        dilindungi LoginException (SerializationInfo info, konteks StreamingContext): asas (info, konteks)

        {

        }

    }

Perhatikan penggunaan parameter dalam konstruktor LoginExceptionkelas dan bagaimana pemanggil kelas asas dipanggil. Perhatikan juga bagaimana konstruktor argumen terakhir digunakan untuk memberikan sokongan untuk bersiri.

Menggunakan kelas pengecualian tersuai

Penyenaraian kod berikut menunjukkan bagaimana anda boleh menggunakan LoginExceptionkelas yang baru kami laksanakan.

kekosongan statik Utama (string [] args)

        {

            cuba

            {

                // Tulis kod di sini untuk log masuk pengguna.

                // Sekiranya kelayakan yang diberikan tidak sah

                // objek pengecualian dilemparkan.

          lemparkan LoginException baru ("Kelayakan tidak sah disediakan ...");

            }

            tangkapan (LoginException loginException)

            {

                // Tulis kod di sini untuk menangani pengecualian

                Console.WriteLine (loginException.Message);

            }

            Konsol. Baca ();

        }

Perhatikan bahawa anda harus melaksanakan kelas pengecualian khusus hanya apabila anda ingin menambahkan lebih banyak fungsi untuk pengendalian pengecualian dalam aplikasi anda, atau ketika masuk akal untuk memberi pengguna maklumat tambahan. Dalam kebanyakan kes, anda ingin bergantung pada pengecualian standard. Net memberi anda.