CodeBlanks Logo Icon CodeBlanks

throw

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

throw ile kendi istisnalarını fırlatmayı öğrenirsin.

throw ile istisna fırlatma

throw anahtar kelimesi bir istisna fırlatır. Bu, programda beklenmedik ya da geçersiz bir durum oluştuğunda durumu bildirmenin yoludur. Genellikle throw new ExceptionType("mesaj") biçiminde kullanılır.

Örnek: if (age < 0) throw new ArgumentException("Negatif yaş"); satırı, age negatif olduğunda yeni bir istisna oluşturur ve fırlatır. Çağıran kod bu istisnayı try/catch ile yakalayabilir; aksi halde program çöker.

Yeniden fırlatma

Bir catch bloğu içinde yakalanan istisnayı aynı blokta işlemek yerine dışarıya iletmek istersen throw; (çıplak throw) kullanırsın. Bu, istisnayı özgün yığın izi (stack trace) ile koruyarak yeniden fırlatır; yani hatanın kaynağı kaybolmaz.

Örnek: catch (Exception) { LogError(); throw; } yapısında önce hata kaydedilir, sonra istisna üst çağrıcıya iletilir. throw; yerine throw ex; yazarsan yığın izi kesilir ve hata kaynağı bu satıra kayar; bu genellikle istenmeyen bir durumdur.

Mesajlı istisna oluşturma

İstisna fırlatırken bir mesaj vermek, hatanın nedenini anlaşılır kılar. new Exception("mesaj") biçiminde oluşturduğun istisna, Message özelliği üzerinden bu mesajı taşır. Hata yakalandığında bu mesajı kullanıcıya gösterebilir ya da günlüğe kaydedebilirsin.

Örnek: throw new Exception("Veri eksik"); satırı, mesajı "Veri eksik" olan bir istisna fırlatır. catch (Exception ex) bloğunda ex.Message bu dizeyi verir. Mesaj ne kadar açıklayıcı olursa, hata ayıklama o kadar kolay olur.

Uygulama Doğrula ve fırlat

try bloğu içinde if (age < 0) koşuluyla throw new ArgumentException("Negatif yaş"); fırlat. Aksi halde Console.WriteLine(age); ile yaş'ı yazdır. catch (ArgumentException ex) bloğu içinde Console.WriteLine(ex.Message); ile mesajı yazdır.

Örnek çözümü göster
try bloğunda if (age < 0) throw new ArgumentException("Negatif yaş"); else Console.WriteLine(age); yaz.
Örnek çözüm:
using System;

class Program
{
    static void Main()
    {
        int age = -5;
        try
        {
            if (age < 0)
            {
                throw new ArgumentException("Negatif yaş");
            }
            Console.WriteLine(age);
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

Kendini test et

  1. throw; ile throw ex; arasındaki fark?

    catch (Exception ex) { throw; }  // A
    catch (Exception ex) { throw ex; }  // B
    • throw ex yığın izini korur
    • throw; yığın izini keser
    • İkisi aynıdır
    • throw; yığın izini korur, throw ex keser
    Cevabı göster

    throw; yığın izini korur, throw ex keser — Doğru! throw; özgün yığın izini korur; throw ex keser.

  2. Yeni istisna fırlat

    if (age < 0) {
        ____ new ArgumentOutOfRangeException("age");
    }
    Cevabı göster
    if (age < 0) {
        throw new ArgumentOutOfRangeException("age");
    }
  3. İfadeyi açıklamasıyla eşleştir

    throw;
    Yeniden fırlat
    throw new Exception()
    Yeni hata
    throw ex;
    Yığın izini keser

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