CodeBlanks Logo Icon CodeBlanks

Hata yönetimi

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

try/catch ile girdi doğrulama ve hata yönetimi eklersin.

Geçersiz kitabı engellemek

Kullanıcı yanlışlıkla sıfır ya da negatif sayfa sayısı girebilir. Bunu önlemek için AddBook metoduna bir doğrulama ekleyeceğiz: pageCount <= 0 ise özel bir istisna fırlatacağız. Bu, önceki derste öğrendiğin istisna mekanizmasını projeye uygular.

InvalidBookException adında özel bir istisna sınıfı tanımlayacağız; Exception'dan türetip base(msg) kurucusunu çağıracağız. Sonra AddBook içinde throw new InvalidBookException("...") ile fırlatıp, Main'de try/catch ile yakalayacağız.

try/catch ile yakalama

Özel istisnayı fırlattıktan sonra, Main'de try/catch ile yakalamalıyız. try bloğu içinde AddBook çağrısını yaparız; hata fırlarsa catch (InvalidBookException ex) bloğu çalışır ve ex.Message ile hatanın açıklamasını yazdırırız.

Bu yapı, programın geçersiz girişte çökmesini engeller; bunun yerine kullanıcıya anlamlı bir hata mesajı gösterilir. Gerçek uygulamalarda bu kalıp çok yaygındır: doğrulama metotları hata fırlatır, çağıran kod ise bunu yakalayarak uygun yanıtı verir.

Uygulama Özel istisna ve try/catch ekle

Dosyanın başında InvalidBookException sınıfını tanımla; Exception'dan türet ve public InvalidBookException(string msg) : base(msg) { } kurucusunu ekle. AddBook metodunda if (pageCount <= 0) koşuluyla throw new InvalidBookException("Sayfa sayısı sıfırdan büyük olmalı"); fırlat. Main içinde try { AddBook("Geçersiz Kitap", 0); } ve catch (InvalidBookException ex) { Console.WriteLine("Hata: " + ex.Message); } yapısını ekle, sonra ListBooks(); çağır.

Örnek çözümü göster
Exception { public InvalidBookException(string msg) : base(msg) { } } tanımla. AddBook'da if (pageCount <= 0) throw new InvalidBookException("Sayfa sayısı sıfırdan büyük olmalı"); ekle. Main'de try { AddBook("Geçersiz Kitap", 0); } catch (InvalidBookException ex) { Console.WriteLine("Hata: " + ex.Message); } ListBooks(); ekle.
Örnek çözüm:
using System;
using System.Collections.Generic;

class Book
{
    public string Title;
    public int PageCount;
}

class InvalidBookException : Exception
{
    public InvalidBookException(string msg) : base(msg) { }
}

class Program
{
    static List<Book> books = new List<Book>();

    static void PrintMenu()
    {
        Console.WriteLine("1 - Ekle");
        Console.WriteLine("2 - Listele");
        Console.WriteLine("3 - Çıkış");
    }

    static void AddBook(string title, int pageCount)
    {
        if (pageCount <= 0)
        {
            throw new InvalidBookException("Sayfa sayısı sıfırdan büyük olmalı");
        }
        books.Add(new Book { Title = title, PageCount = pageCount });
    }

    static void ListBooks()
    {
        foreach (Book b in books)
        {
            Console.WriteLine(b.Title + " - " + b.PageCount + " sayfa");
        }
    }

    static void Main()
    {
        try
        {
            AddBook("Geçersiz Kitap", 0);
        }
        catch (InvalidBookException ex)
        {
            Console.WriteLine("Hata: " + ex.Message);
        }
        ListBooks();
    }
}

Kendini test et

  1. Özel istisna sınıfı

    class InvalidBookException : ____
    {
        public InvalidBookException(string msg) : base(msg) { }
    }
    Cevabı göster
    class InvalidBookException : Exception
    {
        public InvalidBookException(string msg) : base(msg) { }
    }
  2. AddBook'da ne zaman istisna fırlatılmalı?

    static void AddBook(string title, int pageCount)
    • Her zaman
    • title boş olduğunda yalnızca
    • Asla
    • pageCount <= 0 olduğunda
    Cevabı göster

    pageCount <= 0 olduğunda — Doğru! pageCount <= 0 ise InvalidBookException fırlatılır.

  3. Öğeyi açıklamasıyla eşleştir

    InvalidBookException
    Özel istisna
    : base(msg)
    Taban kurucu
    catch (InvalidBookException ex)
    Yakalama bloğu

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