Özel exception
- C# kursu
- Başlangıç
- Ders 110/116
- 5 dk
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.
Başlangıç kodu
using System;
// InvalidAgeException sınıfını tanımla
class Program
{
static void Main()
{
int age = -5;
try
{
// age < 0 ise InvalidAgeException fırlat
}
catch (InvalidAgeException ex)
{
// mesajı yazdır
}
}
}Ö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);
}
}
}Beklenen çıktı
Geçersiz yaş
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 base(msg) ne yapar?
class MyException : Exception {
public MyException(string msg) : base(msg) { }
}- Message'i sıfırlar
- Yeni hata fırlatır
- StackTrace'i siler
- Message'i üst sınıfa iletir Doğru cevap
Açıklama: base(msg) üst sınıfın kurucusunu çağırır ve Message'i ayarlar.
2 Sınıf tanımı
class InvalidAgeException : ____
{ public InvalidAgeException(string msg) : base(msg) { } }
class InvalidAgeException : Exception
{ public InvalidAgeException(string msg) : base(msg) { } }
Açıklama: Exception'dan türetilmiş özel istisna sınıfı olur.
3 Öğeyi açıklamasıyla eşleştir
| Kavram | Anlamı |
|---|---|
: Exception |
Türetilen sınıf |
base(msg) |
Taban kurucu |
throw new InvalidAgeException |
Fırlatma |