C # - Penanganan Pengecualian

Pengecualian adalah masalah yang muncul selama menjalankan program. Pengecualian AC # adalah respons terhadap keadaan luar biasa yang muncul saat program berjalan, seperti upaya untuk membagi dengan nol.

Pengecualian memberikan cara untuk mentransfer kontrol dari satu bagian program ke program lainnya. Penanganan pengecualian C # dibangun di atas empat kata kunci:try, catch, finally, dan throw.

  • try- Blok percobaan mengidentifikasi blok kode di mana pengecualian tertentu diaktifkan. Ini diikuti oleh satu atau lebih blok tangkapan.

  • catch- Program menangkap pengecualian dengan penangan pengecualian di tempat dalam program di mana Anda ingin menangani masalah. Kata kunci catch menunjukkan penangkapan pengecualian.

  • finally- Blok terakhir digunakan untuk mengeksekusi serangkaian pernyataan tertentu, baik pengecualian dilempar atau tidak. Misalnya, jika Anda membuka file, itu harus ditutup baik pengecualian dimunculkan atau tidak.

  • throw- Program mengeluarkan pengecualian saat masalah muncul. Ini dilakukan dengan menggunakan kata kunci lemparan.

Sintaksis

Dengan asumsi blok memunculkan pengecualian, metode menangkap pengecualian menggunakan kombinasi kata kunci coba dan tangkap. Sebuah blok coba / tangkap ditempatkan di sekitar kode yang mungkin menghasilkan pengecualian. Kode dalam blok coba / tangkap disebut sebagai kode yang dilindungi, dan sintaks untuk menggunakan coba / tangkap terlihat seperti berikut -

try {
   // statements causing exception
} catch( ExceptionName e1 ) {
   // error handling code
} catch( ExceptionName e2 ) {
   // error handling code
} catch( ExceptionName eN ) {
   // error handling code
} finally {
   // statements to be executed
}

Anda dapat membuat daftar beberapa pernyataan catch untuk menangkap jenis pengecualian yang berbeda jika blok percobaan Anda memunculkan lebih dari satu pengecualian dalam situasi yang berbeda.

Kelas Pengecualian di C #

Pengecualian C # diwakili oleh kelas. Kelas pengecualian di C # terutama secara langsung atau tidak langsung diturunkan dariSystem.Exceptionkelas. Beberapa kelas pengecualian yang diturunkan dari kelas System.Exception adalahSystem.ApplicationException dan System.SystemException kelas.

Itu System.ApplicationExceptionkelas mendukung pengecualian yang dihasilkan oleh program aplikasi. Oleh karena itu pengecualian yang ditentukan oleh pemrogram harus berasal dari kelas ini.

Itu System.SystemException class adalah kelas dasar untuk semua pengecualian sistem yang telah ditentukan sebelumnya.

Tabel berikut menyediakan beberapa kelas pengecualian yang telah ditentukan yang diturunkan dari kelas Sytem.SystemException -

Sr.No. Kelas & Deskripsi Pengecualian
1

System.IO.IOException

Menangani kesalahan I / O.

2

System.IndexOutOfRangeException

Menangani kesalahan yang dihasilkan saat metode merujuk ke indeks larik di luar rentang.

3

System.ArrayTypeMismatchException

Menangani kesalahan yang dihasilkan ketika tipe tidak cocok dengan tipe array.

4

System.NullReferenceException

Menangani kesalahan yang dihasilkan dari mereferensikan objek null.

5

System.DivideByZeroException

Menangani kesalahan yang dihasilkan dari membagi dividen dengan nol.

6

System.InvalidCastException

Menangani kesalahan yang dihasilkan selama typecasting.

7

System.OutOfMemoryException

Menangani kesalahan yang dihasilkan dari memori kosong yang tidak mencukupi.

8

System.StackOverflowException

Menangani error yang dihasilkan dari stack overflow.

Penanganan Pengecualian

C # menyediakan solusi terstruktur untuk penanganan pengecualian dalam bentuk blok coba dan tangkap. Dengan menggunakan blok ini, pernyataan program inti dipisahkan dari pernyataan penanganan kesalahan.

Blok penanganan kesalahan ini diimplementasikan menggunakan try, catch, dan finallykata kunci. Berikut ini adalah contoh melempar pengecualian ketika kondisi membagi dengan nol terjadi -

using System;

namespace ErrorHandlingApplication {
   class DivNumbers {
      int result;
      
      DivNumbers() {
         result = 0;
      }
      public void division(int num1, int num2) {
         try {
            result = num1 / num2;
         } catch (DivideByZeroException e) {
            Console.WriteLine("Exception caught: {0}", e);
         } finally {
            Console.WriteLine("Result: {0}", result);
         }
      }
      static void Main(string[] args) {
         DivNumbers d = new DivNumbers();
         d.division(25, 0);
         Console.ReadKey();
      }
   }
}

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

Exception caught: System.DivideByZeroException: Attempted to divide by zero. 
at ...
Result: 0

Membuat Pengecualian Buatan Pengguna

Anda juga dapat menentukan pengecualian Anda sendiri. Kelas pengecualian yang ditentukan pengguna diturunkan dariExceptionkelas. Contoh berikut menunjukkan ini -

using System;

namespace UserDefinedException {
   class TestTemperature {
      static void Main(string[] args) {
         Temperature temp = new Temperature();
         try {
            temp.showTemp();
         } catch(TempIsZeroException e) {
            Console.WriteLine("TempIsZeroException: {0}", e.Message);
         }
         Console.ReadKey();
      }
   }
}
public class TempIsZeroException: Exception {
   public TempIsZeroException(string message): base(message) {
   }
}
public class Temperature {
   int temperature = 0;
   
   public void showTemp() {
      
      if(temperature == 0) {
         throw (new TempIsZeroException("Zero Temperature found"));
      } else {
         Console.WriteLine("Temperature: {0}", temperature);
      }
   }
}

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

TempIsZeroException: Zero Temperature found

Benda Melempar

Anda dapat melempar sebuah objek baik secara langsung atau tidak langsung berasal dari System.Exceptionkelas. Anda dapat menggunakan pernyataan lemparan di blok catch untuk melempar objek sekarang sebagai -

Catch(Exception e) {
   ...
   Throw e
}