Serdar YILMAZ / Software Developer
Bizimkisi Bir “Bug” Hikayesi...
Akbank Bankacılık Merkezi
Serdar Yılmaz C# – Exception Sınıfı Oluşturma

C# – Exception Sınıfı Oluşturma

.netİstisnai Durum Yönetimi başlıklı yazımızda Try-Catch-Finaly blokları ile uygulamamızda meydana gelen hataları nasıl yakalayacağımıza ve türlerine göre nasıl filtreleyebileceğimize değinmiştik. Bu yazımızda ise; kendi Exception sınıflarımızı nasıl oluşturacağımıza ve hangi amaçlar doğrultusunda kullanabileceğimize değineceğiz.

Hazır Exception Sınıfları

.NET Framework içerisinde bir çok hazır Exception sınıfı bulunmaktadır. Uygulamamızda çalışma anında bir hata meydana geldiğinde .Net,  hatanın türüne göre ilgili Exception sınıfından bir nesne oluşturarak geriye fırlatmaktadır.

Yukarıdaki örneği inceleyecek olursak; Bir sayının sıfıra bölümü sonsuz olduğundan, sayi_1 değişkeni sayi_2 değişkenine bölünmek istendiğinde .Net bir Exception nesnesi fırlatacaktır. Bize düşen ise try-catch blokları ile bu hatayı yakalamaktır. Yukarıdaki uygulama çalıştırıldığı takdirde ekran çıktısı aşağıdaki gibi olacaktır;

Ekran çıktısını inceleyecek olursak; .Net’in sadece hata vermekle kalmadığını, hatanın neden oluştuğuna dair bilgide verdiğini görebiliriz. Tıpkı bu örnekte olduğu gibi, bizlerde hatalı işlem yapılmasını önlemek amacıyla kontrollü bir şekilde Exception’lar fırlatabiliriz.

Kendi Exception Sınıflarımızı Nasıl Oluşturabiliriz ?

Exception sınıflarının nasıl oluşturulduğunu ve kullanıldığını örnek bir senaryo üzerinden ilerleyerek anlamaya çalışalım. Kullanıcıların şifrelerini değiştirebileceği bir metot yazmak istediğimizde, metot içerisinde en basit haliyle aşağıdaki kontrolleri yapabiliriz;

  1. Belirtilen kullanıcı adı sistemimizde var mı? Eğer yoksa olmayan bir kullanıcının şifresi değiştirilmek isteniyor demektir, böylesi bir durumda bir hata mesajı fırlatmamız gerekir.
  2. Şifresini değiştirmek isteyen kullanıcıdan, doğrulama amaçlı eski şifresini girmesini istediğimizde yanlış bir şifre girerse bir hata mesajı döndürmemiz gerekir.

Yukarıdaki iki durumu da dikkate alarak Exception sınıflarımızı oluşturalım;

Kullanıcı sistemimize kayıtlı olmadığı durumda fırlatacağımız UserNotFoundException ve yanlış şifre girildiği zaman fırlatacağımız WrongPasswordException sınıflarımızı oluşturduk. Dikkat edilecek olursa her iki sınıfımızda Exception sınıfından türetilmiştir ve base anahtar sözcüğü ile hata mesajları temel sınıf olan Exception sınıfının yapıcı metoduna parametre olarak gönderilmiştir.

Oluşturacağımız Exception sınıfları, “Exception” sınıfından türetilmelidir.

base anahtar sözcüğünün kullanımı hakkında daha detaylı bilgi edinmek için Yapıcı Metotlar ve Kalıtım başlıklı içeriği okuyabilirsiniz.

Nasıl Exception Fırlatabiliriz ? 

Exception sınıflarımızı oluşturduğumuza göre şimdi onları hatalı işlem yapılmasını önlemek amacıyla kontrollü bir şekilde fırlatabiliriz. Örnek senaryo üzerinden giderek sınıfımızı ve metodumuzu oluşturalım;

UserManager isimli class içerisinde kod kalabalığını arttırmamak için; kullanıcı adı ve şifre çiftlerini tutan bir Dictionary tanımlayıp, kullanıcının kayıt olup-olmadığını, şifrenin doğru girilip-girilmediğini bu koleksiyon sınıfı üzerinden kontrol ettik. Sizler bu işlemleri veritabanı üzerinden yapabilirsiniz. Dictionary hakkında daha detaylı bilgi edinmek için Dictionary Sınıfı başlıklı içeriği okuyabilirsiniz.

PasswordChange() isimli metodumuzu açıklayacak olursak; İlk olarak parametre olarak gelen kullanıcı adının _Users koleksiyonunda olup olmadığını kontrol ediliyor ve eğer kullanıcı mevcut değilse throw anahtar sözcüğü ile UserNotFoundException istisnası fırlatılıyor. Kullanıcı mevcut ise parametre olarak gelen şifre bilgisinin doğru olup olmadığı kontrol ediliyor ve şifre bilgisi yanlış ise WrongPasswordException istisnası fırlatılıyor. Doğru girildiği takdirde de ilgili kullanıcının şifre bilgisini güncelleniyor.

throw anahtar sözcüğü ile oluşturduğumuz exception sınıflarını nasıl fırlatacağımızı öğrendik, şimdi sıra onları yakalamakta.

_Users koleksiyonunda “serdaryilmaz” adında bir kullanıcı olmadığı için UserNotFoundException istisnasını fırlatacaktır. Ekran çıktısı;

“srdrylmz” kullanıcısının şifresi yanlış girildiğinden WrongPasswordException istisnasını fırlatacaktır.

Serdar YILMAZ


Bu İçeriği Arkadaşlarınızla Paylaşmak İster misiniz?

Bir Yorum Yapın