System.Exception, .NET'teki tüm istisna (hata) sınıflarının temel sınıfıdır. Çalışma sırasında oluşan hataları ve istisnai durumları temsil etmek ve yönetmek için kullanılır. DivideByZeroException veya IOException gibi özel hata sınıflarının hepsi bu sınıftan türer.
Nesneye Yönelik Programlama Ünite 9
Kaynak: https://lolonolo.com/2022/08/12/nesneye-yonelik-programlama-unite-9/
📖 Konu özeti (sınav öncesi tekrar)
Hata Yakalama
Hata Yakalama
try bloğu her zaman çalıştırılır. catch yalnızca bir hata oluştuğunda devreye girer. finally bloğu ise hata oluşsa da oluşmasa da her durumda çalışır, bu yüzden dosya veya bağlantı kapatma gibi temizlik işlemleri genellikle buraya yazılır. Diğer şıklar bu blokların görevlerini karıştırmaktadır.
C#'ta bir istisnayı bilerek oluşturmak (fırlatmak) için throw anahtar kelimesi kullanılır. Örnek: throw new ArgumentException("Geçersiz değer");. return metottan değer döndürür; for, switch ve if ise akış kontrol yapılarıdır.
StackTrace özelliği, hata oluştuğu anda çağrı yığınında (call stack) bulunan metot çağrılarını metin olarak tutar. Böylece hatanın hangi metotta, hangi çağrı zinciriyle oluştuğu izlenebilir. Hatayı açıklayan metin ise Message özelliğinde, yardım bağlantısı da HelpLink özelliğinde bulunur.
Bir fonksiyon durma koşulu olmadan kendini sürekli çağırırsa her çağrı çağrı yığınında (stack) yeni bir çerçeve açar. Bir süre sonra yığın dolar ve StackOverflowException, yani Stack Overflow hatası oluşur. Arithmetic Overflow ise sayısal taşma hatasıdır ve özyinelemeyle ilgili değildir.
Exception'lar (istisnalar) programın çalışma zamanında (runtime) oluşan hatalardır; sıfıra bölme veya olmayan bir dosyayı açma gibi. Söz dizimi hataları ise derleme zamanında derleyici tarafından yakalanır ve exception sayılmaz.
Çalışma zamanında oluşabilecek hatalar try-catch yapısıyla kontrol edilir. Riskli kod try bloğuna yazılır; hata oluşursa program çökmek yerine catch bloğu çalışır. foreach ve while döngü yapılarıdır, new nesne oluşturur, struct ise yapı tanımlar.
II – finally bloğunu yazmak zorunlu değildir.
III – Bir fonksiyonun içinde sadece bir try bloğu yazılabilir.
C# programlama dilinde hata ayıklama ile ilgili yukarda verilenlerden hangisi doğrudur?
finally bloğu isteğe bağlıdır; try-catch tek başına kullanılabilir, bu yüzden II doğrudur. I yanlıştır, çünkü iç içe try blokları yazılabilir. III de yanlıştır, çünkü bir fonksiyonda birden fazla try bloğu bulunabilir. Bu nedenle yalnız II doğrudur.
System.Exception, C#'taki hata sınıflarının temel sınıfıdır. Diğer şıklardaki adlar uydurmadır. Gerçek sınıflar StackOverflowException, DivideByZeroException veya OverflowException biçiminde adlandırılır; "StackExtraflow" ya da "DivideByOne" diye bir sınıf yoktur.