Hata Yönetimi: try-catch-finally Blokları ve Özel Exception Yazma

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

C# Hata Yönetimi: Uygulamanızı Çökmelerden Kurtarın​


Hatalar (Exceptions), programın çalışma zamanında (runtime) karşılaştığı beklenmedik durumlardır. Eğer bu hataları yönetmezseniz, uygulamanız kullanıcıya korkutucu hata pencereleri göstererek kapanır. C#'ta bu durumu engellemek için try-catch-finally bloklarını kullanıyoruz.



1. Temel Hata Yönetimi: try-catch-finally​


Bu yapıyı bir güvenlik ağı gibi düşünebilirsiniz. Kodunuzu try bloğuna koyarsınız, eğer bir sorun çıkarsa catch bloğu devreye girer.

C#:
try
{
// Hata yapma potansiyeli olan kodlar
int sayi = int.Parse("ABC"); // Burada format hatası oluşacak
}
catch (FormatException ex)
{
// Sadece format hatalarında burası çalışır
Console.WriteLine("Hata: Lütfen sadece sayısal giriş yapın!");
}
catch (Exception ex)
{
// Diğer tüm hata türleri için genel yakalayıcı
Console.WriteLine($"Beklenmedik bir hata oluştu: {ex.Message}");
}
finally
{
// Hata olsun ya da olmasın, mutlaka çalışacak kodlar
// Genellikle dosya kapatma veya veritabanı bağlantısı kesme için kullanılır.
Console.WriteLine("İşlem tamamlandı.");
}


  • []try: İzlenecek kod bloğu.
    []catch: Hata yakalandığında yapılacak işlem.
  • finally: Hata olsa da olmasa da temizlik işlemleri için çalışan son durak.



2. Hata Fırlatmak: throw Anahtar Kelimesi​


Bazen hatayı sadece yakalamak yetmez, belirli bir durumda kendi hatamızı "fırlatmak" isteyebiliriz. Örneğin, bir kullanıcının yaşı 18'den küçükse bunu bir "hata" olarak kabul edebiliriz.

C#:
void YasKontrol(int yas)
{
if (yas < 18)
{
throw new Exception("18 yaşından küçükler bu bölüme giremez.");
}
}



3. Özel Exception (Hata) Sınıfı Yazma​


Büyük projelerde standart C# hataları (IndexOutOfRange, NullReference vb.) yetersiz kalabilir. Kendi iş mantığınıza uygun hata sınıfları oluşturarak kodun okunabilirliğini artırabilirsiniz.

Neden Özel Exception?
Loglama yaparken veya kullanıcıya hata mesajı dönerken, hatanın tam olarak hangi iş sürecinden (Örn: Ödeme Hatası, Stok Yetersiz Hatası) kaynaklandığını anlamak için.

C#:
// Özel hata sınıfımız Exception sınıfından türemeli
public class StokYetersizException : Exception
{
public string UrunAdi { get; set; }

public StokYetersizException(string urun) 
    : base($"{urun} ürünü için stokta yeterli adet bulunamadı.")
{
    UrunAdi = urun;
}

}

// Kullanımı:
try
{
throw new StokYetersizException("Laptop");
}
catch (StokYetersizException ex)
{
Console.WriteLine(ex.Message); // Laptop ürünü için stokta yeterli adet bulunamadı.
}



4. Modern C# ile Exception Filters (Hata Filtreleme)​


C# 6.0 ile gelen when anahtar kelimesi sayesinde, hatayı yakalamadan önce belirli bir koşula bakabiliriz. Bu, catch bloğunun içini if-else ile doldurmanızı engeller.

C#:
try
{
// Bir ağ işlemi...
}
catch (Exception ex) when (ex.Message.Contains("404"))
{
Console.WriteLine("Aranan sayfa bulunamadı.");
}
catch (Exception ex) when (ex.Message.Contains("500"))
{
Console.WriteLine("Sunucu hatası oluştu.");
}



Hata Yönetiminde En İyi Uygulamalar (Best Practices)​



  • []Gereksiz catch kullanmayın: Eğer hatayla ilgili bir şey yapmayacaksanız (loglama, kullanıcıya bildirme vb.), hatayı yakalamayın. Bırakın bir üst metot yönetsin.
    []Spesifik olun: Her zaman en özel hatayı (catch FormatException) en üste, genel hatayı (catch Exception) en alta yazın.
    []Boş catch bloklarından kaçının: Hatayı yakalayıp hiçbir şey yapmamak, gelecekte bulamayacağınız gizli bug'lara neden olur.
    []Hataları yutmayın: Eğer hatayı yakalayıp tekrar fırlatmanız gerekiyorsa throw ex; yerine sadece throw; kullanın. Bu, hatanın geldiği orijinal yerin (Stack Trace) kaybolmamasını sağlar.

Hatalı KullanımDoğru Kullanımcatch(Exception) { } // Sessizce geçmekcatch(Exception ex) { Log(ex); throw; }
throw ex; // Stack trace sıfırlanırthrow; // Orijinal hata izi korunur

[TR]



Sonuç​


Hata yönetimi, uygulamanızın zırhıdır. try-catch bloklarını doğru kullanarak hem uygulamanızın ömrünü uzatabilir hem de kullanıcıya çok daha profesyonel bir deneyim sunabilirsiniz. Kendi özel exception sınıflarınızı oluşturmak ise projenizin mimarisini bir üst seviyeye taşıyacaktır.
 
Geri
Üst