C#
Exception sınıfı
Exception sınıfının Message, StackTrace ve InnerException özelliklerini öğrenirsin.
Exception sınıfının özellikleri
Tüm istisnalar System.Exception sınıfından türetilir. Bu sınıfın birkaç yararlı özelliği vardır: Message hatanın açıklamasını, StackTrace çağrı yığınını, InnerException ise varsa özgün istisnayı tutar. Bunlar catch bloğunda hata ayıklamayı kolaylaştırır.
Örnek: catch (Exception ex) { Console.WriteLine(ex.Message); } satırı hatanın mesajını yazdırır. ex.StackTrace ile hatanın nereden geldiğini görür, ex.InnerException ile sarmalanmış özgün hataya ulaşırız. Bu özellikler hata ayıklama ve günlükleme için temeldir.
StackTrace ile hata kaynağı
StackTrace özelliği, istisnanın fırlatıldığı noktadan itibaren çağrı yığınını metin olarak verir. Hangi metodun, hangi satırda hataya yol açtığını gösterir. Hata ayıklama ve günlükleme için çok değerlidir.
Örnek: Console.WriteLine(ex.StackTrace); çağrısı, hatanın izini satır satır yazdırır. Bu çıktıdan hatanın kaynağını ve hangi yöntemler zincirinin onu tetiklediğini görebilirsin. Yine de üretimde tam yığın izini kullanıcıya göstermek güvenlik açısından riskli olabilir; günlüğe kaydetmek daha iyi bir yöntemdir.
InnerException ile sarmalama
Bazen düşük seviye bir hatayı daha yüksek seviye bir istisnayla sarmalamak istersin. Bu, özgün hatayı kaybetmeden üst katmanda anlamlı bir mesaj sunmanı sağlar. InnerException özelliği, sarmalanan özgün istisnayı taşır.
Örnek: throw new Exception("Veri yüklenemedi", innerEx); satırı, innerEx'i InnerException olarak tutan yeni bir istisna fırlatır. catch bloğunda ex.InnerException.Message ile özgün hatanın mesajına ulaşabilirsin. Bu teknik, katmanlı mimarilerde yaygındır.
Uygulama Mesajı yakala ve yazdır
try bloğu içinde throw new Exception("Veri eksik"); ile istisna fırlat. catch (Exception ex) bloğu içinde Console.WriteLine ile ex.Message'i yazdır.
Örnek çözümü göster
try { throw new Exception("Veri eksik"); } catch (Exception ex) { Console.WriteLine(ex.Message); } yaz.
Örnek çözüm:
using System;
class Program
{
static void Main()
{
try
{
throw new Exception("Veri eksik");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
Kendini test et
-
ex.Message ne döndürür?
Exception e = new Exception("Hata oluştu");
Console.WriteLine(e.Message);
- "Hata oluştu"
- null
- "Exception"
- FormatException fırlatır
Cevabı göster
"Hata oluştu" — Doğru! Message, kurucuda verilen açıklamayı döndürür.
-
Mesaja eriş
catch (Exception ex) {
Console.WriteLine(____);
}
Cevabı göster
catch (Exception ex) {
Console.WriteLine(ex.Message);
}
-
InnerException neden kullanılır?
- Daha hızlı fırlatmak için
- Özgün hatayı korumak için
- Sadece string için
- StackTrace'i silmek için
Cevabı göster
Özgün hatayı korumak için — Doğru! InnerException ile özgün hatayı sarmalanmış istisnanın içinde korursun.
Sıradaki ders: Özel exception