CodeBlanks Logo Icon CodeBlanks

Özel exception

C# kursu · Başlangıç · Ders 110/116

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

  1. 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.

  2. 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) { } }
  3. Öğeyi açıklamasıyla eşleştir

    : Exception
    Türetilen sınıf
    base(msg)
    Taban kurucu
    throw new InvalidAgeException
    Fırlatma

Başlangıç bölümündeki tüm dersler