C#
Özel exception
Kendi Exception türevi sınıfını yazmayı öğrenirsin.
Özel istisna sınıfı tanımlama
Bazen uygulamanın alanına özel hataları temsil etmek için kendi istisna sınıfını tanımlamak istersin. Bu, Exception sınıfından türetme yaparak olur. Adlandırma geleneği, sınıf adının Exception ile bitmesidir; böylece amacı hemen anlaşılır.
Örnek: class InvalidAgeException : Exception { ... } tanımı, yaş ile ilgili hataları temsil eden yeni bir tür oluşturur. İçine bir kurucu eklersin; bu kurucu base(msg) çağrısıyla üst sınıfın Message özelliğini ayarlar. Böylece standart istisna mekanizmasıyla çalışır.
Exception'dan türetme
Özel istisna sınıfı yazarken : Exception biçiminde türetme yaparsın. Sınıfın içinde en az bir kurucu bulunur; bu kurucu bir string msg parametresi alıp : base(msg) ile üst sınıfa iletir. Böylece Message özelliği otomatik olarak ayarlanır.
Örnek: public InvalidAgeException(string msg) : base(msg) { } kurucusu, verilen mesajla yeni bir InvalidAgeException oluşturur. Daha sonra bu istisnayı throw new InvalidAgeException("Negatif yaş"); biçiminde fırlatabilirsin; yakalarken catch (InvalidAgeException ex) ile özel türü kullanırsın.
Ne zaman özel istisna?
Özel istisna sınıfları, uygulamanın alanına özgü hataları temsil etmek için kullanılır. Örneğin bir kütüphane uygulamasında BookNotFoundException, bir ödeme sisteminde PaymentFailedException tanımlamak anlamlıdır. Bu sayede catch blokları daha okunaklı ve anlamlı olur.
Standart Exception yerine özel tür kullanmak, hatanın kaynağını tür seviyesinde ayrıştırmanı sağlar. Yine de her küçük hata için yeni sınıf tanımlamak kalabalık yaratır; yalnızca gerçekten alan özelinde ihtiyaç duyduğunda kullanmalısın.
Uygulama Özel istisna tanımla ve fırlat
Dosyanın başında InvalidAgeException sınıfını tanımla; Exception'dan türet ve public InvalidAgeException(string msg) : base(msg) { } kurucusunu ekle. Main içinde try bloğunda if (age < 0) koşuluyla throw new InvalidAgeException("Geçersiz yaş"); fırlat. catch (InvalidAgeException ex) bloğunda Console.WriteLine(ex.Message); yaz.
Örnek çözümü göster
Exception { public InvalidAgeException(string msg) : base(msg) { } } tanımla.
try'da if (age < 0) throw new InvalidAgeException("Geçersiz yaş"); ekle.
Örnek çözüm:
using System;
class InvalidAgeException : Exception
{
public InvalidAgeException(string msg) : base(msg) { }
}
class Program
{
static void Main()
{
int age = -5;
try
{
if (age < 0)
{
throw new InvalidAgeException("Geçersiz yaş");
}
}
catch (InvalidAgeException ex)
{
Console.WriteLine(ex.Message);
}
}
}
Kendini test et
-
base(msg) ne yapar?
class MyException : Exception {
public MyException(string msg) : base(msg) { }
}
- Message'i sıfırlar
- Yeni hata fırlatır
- Message'i üst sınıfa iletir
- StackTrace'i siler
Cevabı göster
Message'i üst sınıfa iletir — Doğru! base(msg) üst sınıfın kurucusunu çağırır ve Message'i ayarlar.
-
Sınıf tanımı
class InvalidAgeException : ____
{ public InvalidAgeException(string msg) : base(msg) { } }
Cevabı göster
class InvalidAgeException : Exception
{ public InvalidAgeException(string msg) : base(msg) { } }
-
Öğeyi açıklamasıyla eşleştir
- : Exception
- Türetilen sınıf
- base(msg)
- Taban kurucu
- throw new InvalidAgeException
- Fırlatma
Sıradaki ders: Özet - İstisna temelleri