C# programlama dilinde hata yakalama, uygulamalarda oluşabilecek hataların kontrol altına alınması ve bu hatalara uygun şekilde yanıt verilmesini sağlamak için kullanılan önemli bir mekanizmadır. Hata yönetimi, uygulamaların beklenmeyen durumlarla düzgün bir şekilde başa çıkmasını sağlar ve programların daha kararlı hale gelmesine yardımcı olur.
1. Hata Yakalamanın Önemi
- Programın Çökmesini Önler: Hatalar kontrol edilmezse uygulamalar çökebilir.
- Kullanıcı Deneyimini İyileştirir: Hatalara uygun mesajlar gösterilerek kullanıcı bilgilendirilir.
- Debug Sürecini Kolaylaştırır: Hatalar loglanarak geliştiricilere detaylı bilgi sağlanır.
2. Hata Yakalamada Kullanılan Anahtar Yapılar
a. try
Bloğu
Hata oluşabilecek kodlar bu bloğa yazılır. Eğer bir hata meydana gelirse kontrol catch
bloğuna aktarılır.
b. catch
Bloğu
Hataları yakalar ve bu hatalara uygun işlemleri gerçekleştirir.
c. finally
Bloğu
Hata oluşup oluşmamasına bakılmaksızın her zaman çalıştırılan kodları içerir. Genellikle kaynakları serbest bırakmak için kullanılır.
d. throw
Anahtar Kelimesi
Hata oluşturmak veya var olan bir hatayı tekrar fırlatmak için kullanılır.
3. Temel Hata Yönetimi Yapısı
try
{
// Hata oluşabilecek kodlar buraya yazılır.
}
catch (Exception ex)
{
// Hata yakalandığında yapılacak işlemler buraya yazılır.
Console.WriteLine($"Hata: {ex.Message}");
}
finally
{
// Her durumda çalışacak kodlar buraya yazılır.
Console.WriteLine("İşlem tamamlandı.");
}
4. Örnek Kullanım
a. Bölme İşlemi ve Hata Yönetimi
class Program
{
static void Main(string[] args)
{
try
{
Console.Write("Bir sayı girin: ");
int sayi1 = Convert.ToInt32(Console.ReadLine());
Console.Write("Bir başka sayı girin: ");
int sayi2 = Convert.ToInt32(Console.ReadLine());
int sonuc = sayi1 / sayi2;
Console.WriteLine($"Sonuç: {sonuc}");
}
catch (DivideByZeroException)
{
Console.WriteLine("Hata: Sıfıra bölme hatası!");
}
catch (FormatException)
{
Console.WriteLine("Hata: Lütfen geçerli bir sayı girin!");
}
catch (Exception ex)
{
Console.WriteLine($"Beklenmeyen bir hata oluştu: {ex.Message}");
}
finally
{
Console.WriteLine("İşlem tamamlandı.");
}
}
}
Çıktılar:
- Kullanıcı sıfıra bölerse:
Hata: Sıfıra bölme hatası!
- Kullanıcı geçersiz bir giriş yaparsa:
Hata: Lütfen geçerli bir sayı girin!
5. throw
ile Hata Fırlatma
Bazı durumlarda, özel bir hata fırlatmanız gerekebilir.
Örnek:
class Program
{
static void KontrolEt(int yas)
{
if (yas < 18)
{
throw new Exception("Yaş 18'den küçük olamaz.");
}
}
static void Main(string[] args)
{
try
{
KontrolEt(15);
}
catch (Exception ex)
{
Console.WriteLine($"Hata: {ex.Message}");
}
}
}
Çıktı:Hata: Yaş 18'den küçük olamaz.
6. Özel Hata Sınıfları
C#’da kendi özel hata sınıflarınızı oluşturabilirsiniz.
Örnek:
class YasHatasi : Exception
{
public YasHatasi(string mesaj) : base(mesaj) { }
}
class Program
{
static void KontrolEt(int yas)
{
if (yas < 18)
{
throw new YasHatasi("Yaş 18'den küçük olamaz.");
}
}
static void Main(string[] args)
{
try
{
KontrolEt(15);
}
catch (YasHatasi ex)
{
Console.WriteLine($"Hata: {ex.Message}");
}
}
}
Çıktı:Hata: Yaş 18'den küçük olamaz.
7. Hata Türleri
C#’da sık kullanılan hata türlerinden bazıları:
DivideByZeroException
: Sıfıra bölme hatası.NullReferenceException
: Null bir nesneye erişilmeye çalışıldığında oluşur.IndexOutOfRangeException
: Dizi sınırlarının dışına erişildiğinde oluşur.FileNotFoundException
: Dosya bulunamadığında oluşur.
8. using
İfadesi ile Kaynak Yönetimi
using
ifadesi, kaynakların otomatik olarak serbest bırakılmasını sağlar ve hata yönetimiyle entegre çalışabilir.
Örnek:
using (StreamReader sr = new StreamReader("dosya.txt"))
{
string icerik = sr.ReadToEnd();
Console.WriteLine(icerik);
}