
Herkese selamlar,
Bu konumuzda C# dilinde sıklıkla karşılaşılan hata türlerini ele alacağız. Şimdiden iyi okumalar.
C# dilinde 4 ana hata türü vardır. Bunlar:
1. Derleme Zamanı Hataları (Compile-Time Errors)
2. Çalışma Zamanı Hataları (Runtime Errors)
3. 3. Mantıksal Hatalar (Logical Errors)
4. Sistem / Ortam Hataları
Gelin şimdi bu kategorideki hataları tek tek örnekler ile ele alalım.
DERLEME ZAMANI HATALARI (Compile-Time Errors)
Kod daha çalışmadan, derleyici tarafından tespit edilen hatalardır. Programı çalıştırdığınız anda, daha çalışma aşaması başlamadan programın çökmesine neden olan bir hata türüdür. Şimdi bu kategorideki hatalara bakalım.
1. Syntax Errors (Sözdizimi Hataları)
Kodun dil kurallarına aykırı yazılmasıdır. Noktalı virgül eksikliği, hatalı parantez, yanlış anahtar kelime gibi hatalarda derleme yapılmaz ve program çöker. Örnek olarak;
C#:
int x = 5
Console.WriteLine(x);
int x = 5 satırında ; eksik. Bu yüzden derleme işlemi gerçekleşmedi ve program hata verdi.
2. Type Error (Tür Uyumsuzluğu)
Bir değişkene yanlış türde veri atanması sonucunda ortaya çıkan bir hata türüdür. Örnek olarak:
C#:
int yas = "merhaba";
Sayı olması gereken yere string değer ataması yaptık ve bunun sonucunda hata aldık. C# güçlü tip denetimi yapar. Türler uyuşmuyorsa derlemez.
3. Undefined Reference Error
Tanımlanmayan bir isim (değişken, metod, sınıf) kullanılması sonucu çıkan hatadır. Örnek olarak:
C#:
Console.WriteLine(ad); // ad tanımlı değil
Burada ad değişkenini tanımlamadığımız için hata aldık.
ÇALIŞMA ZAMANI HATALARI (Runtime Errors)
Program derlenir ama çalışırken hata veren türdür. Yani program başarıyla derlendi ancak kodda bir hata nedeniyle program çöktü. İşte bu hata türü budur.
1. NullReferenceException
null olan bir nesnenin özelliğine-metoduna erişmeye çalıştığında oluşur. Örnek olarak:
C#:
string ad = null;
Console.WriteLine(ad.Length);
ad null. .Length çalıştırılamaz.
2. DivideByZeroException
Sıfıra bölme işlemi yapıldığında fırlatılır. Çünkü matematikte bir sayı sıfıra bölünemez. Örnek olarak:
C#:
int x = 10 / 0;
Sıfıra bölmeye çalıştık ve hata aldık.
3. IndexOutOfRangeException
Dizi sınırları dışına çıkıldığında oluşur. Örnek olarak:
C#:
int[] a = {1,2,3};
Console.WriteLine(a[5]);
Dizinin boyutu 3 ama index olarak 5 kullanılıyor. Yani boyut aşımı oldu ve hata verdi.
4. FormatException
Beklenen türde olmayan bir string parse edilirse oluşur. Örnek olarak:
C#:
int sayi = int.Parse("merhaba");
Merhaba bir sayı değil string bir değerdir. Bu nedenden ötürü hata aldık.
5. FileNotFoundException
Kod erişmeye çalıştığı dosyayı bulamadığında oluşur. Örnek olarak:
Kod:
var text = File.ReadAllText("dosya.txt");
dosya.txt dizin içinde yoksa program bulamaz ve hata verir.
6. IOException
Giriş/çıkış operasyonlarında genel bir hata türüdür. Örnek olarak:
C#:
using var fs = new FileStream("dosya.txt", FileMode.Open); // dosya kilitli olabilir ancak biz açmaya çalıştığımız için hata aldık
7. InvalidOperationException
Bir işlemin geçerli olmadığı durumda oluşur. Örnek olarak:
C#:
var list = new List<int>();
int x = list.First(); // liste boşken First çağırılıyor
8. ArgumentException
Metoda geçersiz bir argüman gönderildiğinde oluşur. Örnek olarak:
C#:
void Yaz(string t) {
if (t == "")
throw new ArgumentException("Boş string olamaz!");
}
Yaz("");
Yaz kısmını boş bıraktığımız için hata aldık.
9. ArgumentNullException
Null gönderilemeyecek bir parametreye null verilirse oluşur. Örnek olarak:
C#:
File.ReadAllText(null); // null gönderdiğimiz için hata aldık ama dosya işlemlerinde null olmaz
10. KeyNotFoundException
Dictionary (sözlük) içinde olmayan bir anahtara erişildiğinde oluşur. Örnek olarak:
C#:
var d = new Dictionary<string, int>();
Console.WriteLine(d["yas"]); // yas yok
11. NotImplementedException
Henüz yazılmamış metodlar için kullanılır. Örnek olarak:
C#:
void Hesapla() {
throw new NotImplementedException();
}
12. NotSupportedException
Bir özelliğin desteklenmediği durumlarda atılır. Örnek olarak:
C#:
var s = new MemoryStream(new byte[5], writable: false);
s.WriteByte(10); // yazma desteklenmiyor
MANTIKSAL HATALAR (Logical Errors)
Kod çalışır ama yanlış sonuç verir. En tehlikeli hata türüdür. Şimdi mantıksal hatalara örnekler verelim:
C#:
int fiyat = 100;
int toplam = fiyat * 0; // yanlış işlem
C#:
int puan = 20;
if (puan > 100)
Console.WriteLine("Geçti"); // mantık hatası
SİSTEM / ORTAM HATALARI
1. OutOfMemoryException
Program belleği tükettiğinde oluşur. Örnek olarak:
C#:
int[] veri = new int[int.MaxValue]; // devasa dizi
2. StackOverflowException
Sonsuz özyineleme (recursive döngü) olduğunda oluşur. Örnek olarak:
C#:
void A() { A(); }
A(); // sonsuz döngü
C# hata türleri genel olarak bu şekildedir. Başka dillerdeki hata türleri de çok yakında gelecek. Bir sonraki konuda görüşmek üzere kendinize iyi bakın







