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.ApplicationException
dan System.SystemException
kelas memperluas System.Exception
kelas, yang seterusnya berasal dari System.Object
kelas. 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.Exception
dan bukan dari ApplicationException
. ApplicationException
pada asalnya dimaksudkan untuk digunakan untuk membuat pengecualian yang ditentukan pengguna, tetapi menggunakannya tidak lagi dianjurkan. Seperti yang dinyatakan oleh dokumentasi Microsoft:
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 ApplicationException
tidak digunakan lagi adalah bahawa menggunakannya secara tidak perlu memperluas hierarki pengecualian. Walaupun ApplicationException
kelas meluaskan Exception
kelas, 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.Exception
kelas. 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 LoginException
kelas 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 LoginException
kelas 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.