Tüm programlama dillerinde olduğu gibi C# dilinde de programın çalışma zamanında meydana gelecek hataları engellemeye yarayan yöntemler bulunmaktadır. Try-catch-finally blokları C#da hataları yakalamak için en fazla kullanılan kod bloğudur.
Try-Catch-Finally Bloklarının Çalışma Şekli
Hata oluşma ihtimali bulunan kod satırları try bloğunun içine yazılır. Try bloğu içerisinde herhangi bir hata meydana gelirse try bloğundaki diğer kodlar çalıştırılmadan catch bloğu içerisine atlanarak buradaki kodlar çalıştırılır. Eğer programda hata meydana gelmezse catch bloğu içerisinde ki kodlar çalıştırılmaz. Try ve catch komutları mutlaka birlikte kullanılması gereken bloklardır. Finally bloğunun kullanımı ise yazılımcının isteğine bağlıdır. Finally bloğunda ki kodlar try ve catch bloklarından bağımsız her halükarda çalıştırılacak kodları içerir.
Konunun daha iyi anlaşılması için bir örnek üzerinden devam edelim. Bir form uygulaması açarak, ortalamayı hesaplayan aşağıdaki gibi bir uygulama yapalım.
Hesapla butonuna tıklayarak aşağıdaki kodları yazıyoruz.
Kodları incelediğimizde kullanıcıdan verilerin alınarak değişkenlere atıldığı kısım try bloğu içerisine yazılmıştır. Bu blok içerisinde ki kodlarda kullanıcının textboxlara sayısal değerler dışında veri girildiğinde hata oluşacağı öngörülmüştür. Eğer kullanıcı yanlış veri girişi yaparsa catch bloğundaki kodlar çalıştırılır ve hata meydana geldi mesajı verilir. Hata oluşsa da oluşmasa da finally bloğu içerisindeki kod çalıştırılarak textboxdaki veriler silinir.
hataTuru olarak tanımlanan değişken Exception turundedir ve yakalanan hatayla ilgili verileri içerir.
Birden Fazla Catch Bloğu Oluşturmak
Uygulamalarda bir çok sebepten dolayı hata oluşma riski bulunmaktadır. Şayet farklı hata türleri oluştuğunda farklı kod blokları işletilmek istenirse birden fazla catch bloğu kullanılabilir.
Not: Finally kod bloğunun kullanılması tamamen programcının isteğine ve ihtiyacına bağlıdır. Kullanılması zorunlu değildir.
Alıntıdır!
Kod:
Try{
[COLOR="Lime"]//Hata oluşabilecek kodlar[/COLOR]
}
Catch{
[COLOR="lime"]//Hata oluştuğunda çalışacak kodlar[/COLOR]
}
Finally{
[COLOR="lime"]//Her halükarda çalıştırılacak kodlar[/COLOR]
}
Try-Catch-Finally Bloklarının Çalışma Şekli
Hata oluşma ihtimali bulunan kod satırları try bloğunun içine yazılır. Try bloğu içerisinde herhangi bir hata meydana gelirse try bloğundaki diğer kodlar çalıştırılmadan catch bloğu içerisine atlanarak buradaki kodlar çalıştırılır. Eğer programda hata meydana gelmezse catch bloğu içerisinde ki kodlar çalıştırılmaz. Try ve catch komutları mutlaka birlikte kullanılması gereken bloklardır. Finally bloğunun kullanımı ise yazılımcının isteğine bağlıdır. Finally bloğunda ki kodlar try ve catch bloklarından bağımsız her halükarda çalıştırılacak kodları içerir.
Konunun daha iyi anlaşılması için bir örnek üzerinden devam edelim. Bir form uygulaması açarak, ortalamayı hesaplayan aşağıdaki gibi bir uygulama yapalım.
Hesapla butonuna tıklayarak aşağıdaki kodları yazıyoruz.
Kod:
[COLOR="DeepSkyBlue"] try[/COLOR]
{
double sayi1 = Convert.ToDouble(txtSayi1.Text);
double sayi2 = Convert.ToDouble(txtSayi2.Text);
double ort = (sayi1 + sayi2) / 2;
lblSonuc.Text = ort.ToString();
}
[COLOR="deepskyblue"] catch (Exception hataTuru)[/COLOR]
{
lblSonuc.Text = "Hata meydana geldi." + hataTuru;
}
[COLOR="deepskyblue"] finally[/COLOR]
{
txtSayi1.Text = "";
txtSayi2.Text = "";
}
Kodları incelediğimizde kullanıcıdan verilerin alınarak değişkenlere atıldığı kısım try bloğu içerisine yazılmıştır. Bu blok içerisinde ki kodlarda kullanıcının textboxlara sayısal değerler dışında veri girildiğinde hata oluşacağı öngörülmüştür. Eğer kullanıcı yanlış veri girişi yaparsa catch bloğundaki kodlar çalıştırılır ve hata meydana geldi mesajı verilir. Hata oluşsa da oluşmasa da finally bloğu içerisindeki kod çalıştırılarak textboxdaki veriler silinir.
hataTuru olarak tanımlanan değişken Exception turundedir ve yakalanan hatayla ilgili verileri içerir.
Birden Fazla Catch Bloğu Oluşturmak
Uygulamalarda bir çok sebepten dolayı hata oluşma riski bulunmaktadır. Şayet farklı hata türleri oluştuğunda farklı kod blokları işletilmek istenirse birden fazla catch bloğu kullanılabilir.
Kod:
try{
[COLOR="lime"]//hataya müsait kod bloğu[/COLOR]
}
catch(OverFlowException hata1){
[COLOR="Lime"]//Taşma hatası meydana gelirse çalıştırılacak kod bloğu[/COLOR]
}
catch(ArithmeticException hata2){
[COLOR="lime"]//Aritmetiksel hata meydana gelirse çalıştırılacak kod bloğu[/COLOR]
}
Not: Finally kod bloğunun kullanılması tamamen programcının isteğine ve ihtiyacına bağlıdır. Kullanılması zorunlu değildir.
Alıntıdır!