C# try-catch İle Hata Yakalama
Bu yazımda C#’ta try-catch ile hata yakalamadan bahseceğim.Eğer yazdığımız programda bir hata oluşma ihtimali varsa programın kullanıcıya patlak vermemesi için bu yapı kullanılır.try-catch ile hata olabilecek kısmı kontrol edebilir,hataların raporunu alabiliriz.Şimdi ayrıntılı bir şekilde inceleyelim.
try { } catch { }
Genel anlamda yapısı yukarıdaki gibidir.
Eğer yazdığımız programda herhangi bir şekilde hata oluşma ihtimali varsa o komutlar try bloğu içine yazılır.Eğer hata oluşursa programın çalışmasını durdurarak, program akışını catch bloğuna yönlendirir.
try da hata oluştuğunda catch bloğuna gelirken oluşan hata arka planda bir nesne olarak fırlatılır.Bu nesne de Exception tipinden belirlediğimiz bir referansa yakalanır.Bu olaya handle denir.Şimdi bu konuyla ilgili bir örnek verelim.
try { } catch (Exception ex) { throw; }
catch kodunun yanına açılan parantez içinde ex adında Exception tipli bir referans tanımladım.Yukarda da bahsettiğim gibi hata nesnesini ex referansı yakalayacaktır.
Öncelikle Exception ile hata nesnesini yakalamayı göstermeden önce Visual Studio derleyicisinde bir hata mesajını inceleyelim.
Hata mesajının ismine dikkatinizi çekerim.FormatException tipinde bir hatadır.Bu hatayı genellikle textboxtaki değeri int’e cevirmeye calıstığımızda alırız.int tipine değiştirilemeyen karakterler girildiğinde bu hatayı verir.
Bu hata gibi bir çok yaptığımız hatalardan,başka hata tipleri görebiliriz.
FormatException,OverFlowException,DivideByZeroException v.s gibi tüm hata tiplerinin ortak tipi Exception dır. bütün bu tiplerdeki hatalar Exception tipi ile yakalanabilirler.
try { int a = Convert.ToInt32(textBox1.Text); } catch (FormatException fr) { // burada sadece FormatException türünden hatalar yakalnır. MessageBox.Show(fr.Message+""); MessageBox.Show("Lütfen boş bırakmayanız, sayı yazınız"); } catch(OverflowException ov) { // burada sadece OverflowException türünden hatalar yakalnır. MessageBox.Show(ov + ""); MessageBox.Show("Lütfen çok büyük sayı girmeyiniz"); } catch(DivideByZeroException dv) { // burada sadece DivideByZeroException türünden hatalar yakalnır. MessageBox.Show(dv + ""); MessageBox.Show("0 a bölünme tanımsızdır"); }
Bu şekilde kod yazarsak eğer,hata alındığı anda hatanın tipi kontrol edilir ve o hatayla ilgili direk mesaj kutusunda bilgi verecektir.Örnek olarak aşağıdaki şekle bakınız.
Yakaladığımız hatayı “Hata 2” deki gibi değilde “Hata 1” resmindeki hata açıklama satırındaki gibi göstermeyi nasıl yaptığımızı sorarsanız eğer aşağıdaki örnek işimizi görecektir.
MessageBox.Show(fr.Message + "");
hocam kodlarınızı aynen editöre yazıp çalıştırdım önce giriş dizesi hatası adın sistem mesajı çıkıyor daha sonra benim mesajım çıkıyor ama program çalışmaya devam ediyornormalde benim mesajım çıkması lazım neden?
Ne demek istediğiniz anlaşılır değil…Ayriyetten kod paylaşımı yaparsanız daha isabetli fikir verebilirim.