C#
Hata yönetimi
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
-
Ö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) { }
}
-
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.
-
Öğeyi açıklamasıyla eşleştir
- InvalidBookException
- Özel istisna
- : base(msg)
- Taban kurucu
- catch (InvalidBookException ex)
- Yakalama bloğu
Sıradaki ders: Birleştirme