C# - Penanganan Pengecualian
Pengecualian adalah masalah yang muncul selama eksekusi program. Pengecualian C# adalah respons terhadap keadaan luar biasa yang muncul saat program sedang berjalan, seperti upaya untuk membagi dengan nol.
Pengecualian menyediakan cara untuk mentransfer kontrol dari satu bagian program ke bagian lain. Penanganan pengecualian C# dibangun di atas empat kata kunci:coba , tangkap , akhirnya , dan melempar .
-
coba Sebuah blok coba mengidentifikasi blok kode yang pengecualian tertentu diaktifkan. Ini diikuti oleh satu atau lebih blok tangkapan.
-
menangkap Sebuah program menangkap eksepsi dengan penangan pengecualian di tempat dalam program di mana Anda ingin menangani masalah tersebut. Kata kunci catch menunjukkan penangkapan pengecualian.
-
akhirnya Blok akhirnya digunakan untuk mengeksekusi serangkaian pernyataan yang diberikan, apakah pengecualian dilempar atau tidak dilempar. Misalnya, jika Anda membuka file, itu harus ditutup apakah ada pengecualian atau tidak.
-
melempar Sebuah program melempar pengecualian ketika masalah muncul. Ini dilakukan dengan menggunakan kata kunci lempar.
Sintaks
Dengan asumsi sebuah blok memunculkan eksepsi, sebuah metode menangkap eksepsi menggunakan kombinasi kata kunci try and catch. Blok coba/tangkap ditempatkan di sekitar kode yang mungkin menghasilkan pengecualian. Kode dalam blok try/catch disebut sebagai kode yang dilindungi, dan sintaks untuk menggunakan try/catch 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 try Anda memunculkan lebih dari satu pengecualian dalam situasi yang berbeda.
Kelas Pengecualian di C#
Pengecualian C# diwakili oleh kelas. Kelas pengecualian dalam C# terutama secara langsung atau tidak langsung diturunkan dari System.Exception kelas. Beberapa kelas pengecualian yang diturunkan dari kelas System.Exception adalah System.ApplicationException dan System.SystemException kelas.
System.ApplicationException kelas mendukung pengecualian yang dihasilkan oleh program aplikasi. Oleh karena itu pengecualian yang didefinisikan oleh programmer harus berasal dari kelas ini.
System.SystemException class adalah kelas dasar untuk semua pengecualian sistem yang telah ditentukan sebelumnya.
Tabel berikut menyediakan beberapa kelas pengecualian standar yang diturunkan dari kelas Sytem.SystemException
No.Sr. | 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 jangkauan. |
3 |
System.ArrayTypeMismatchException
Menangani kesalahan yang dihasilkan saat jenis tidak cocok dengan jenis larik. |
4 |
System.NullReferenceException
Menangani kesalahan yang dihasilkan dari mereferensikan objek nol. |
5 |
System.DivideByZeroException
Menangani kesalahan yang dihasilkan dari pembagian 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 kesalahan yang dihasilkan dari stack overflow. |
Menangani Pengecualian
C# menyediakan solusi terstruktur untuk penanganan eksepsi dalam bentuk blok coba dan tangkap. Dengan menggunakan blok-blok ini, pernyataan program inti dipisahkan dari pernyataan penanganan kesalahan.
Blok penanganan kesalahan ini diimplementasikan menggunakan coba , tangkap , dan akhirnya kata kunci. Berikut ini adalah contoh pelemparan eksepsi ketika pembagian dengan kondisi nol terjadi
Demo Langsung
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 dieksekusi, 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 berasal dari Pengecualian kelas. Contoh berikut menunjukkan ini
Demo Langsung
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 dieksekusi, menghasilkan hasil sebagai berikut
TempIsZeroException: Zero Temperature found
Melempar Benda
Anda dapat melempar objek jika objek tersebut secara langsung atau tidak langsung diturunkan dari System.Exception kelas. Anda dapat menggunakan pernyataan throw di blok catch untuk melempar objek saat ini sebagai −
Catch(Exception e) {
...
Throw e
}