Merhaba arkadaşlar,
Önceki yazımızda .NET'te bulunan ve en sık karşılaşılan hataları yakalamayı incelemiştik.Bunlar örneğin değişkenlerin alabileceği boyuttan fazla bir değer atandığında OverflowException veya parametre bekleyen yere kabul edemeyeceği türden bir değer attığımızda FormatException gibi istisnai durum sınıfları bulunmakdaydı.Uygulamalarımızda oluşturduğumuz class'lar üzerinden işlemler yaparken kendi hata yakalama mekanizmalarımızı oluşturmak isteyebiliriz.
Bu hata yakalama sınıflarını yazmak için yazdığımız istisnai durumu class'ları ApplicationException class'ından türetilmelidir. ApplicationException'ın içerisinde ki üyeleri bu şekilde kendi Exception sınıfımızda kullanabiliriz.Burada ki kullanabileceğimiz üyeler .NET'in bize verdiği hazır exception class'larındaki üyelerdir aslında örneğin hatayı ekrana yazdırmakta kullandığımız Message özelliği.
Örnek üzerinden devam etmek gerekirse 3 özelliği olan bir Personel sınıfımız var ve bizim yapmak istediğimiz bu Personel sınıfının Maas isimli özelliğine atanan değerleri kontrol etmek.Mesela 500-750 arasında bir değer atanırsa maaş geçerli sayılıp ekrana yazılacak veya bu girilen değer 500'ün altında veya 750'nin üstünde olursa bu sefer oluşturduğumuz PersonelException isimli exception sınıfını kullanarak bu hatayı yakaladığımızda oluşturduğumuz class'taki message özelliği ile hata ile ilgili bilgiyi ekrana yazdırmak isteyelim.
İlk olarak hata üzerinde işlem yapacağımız class olan PersonelException classını yazıyoruz.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
//PersonelException hata class'ımızını ApplicationException isimli sınıftan türeterek Exception özelliklerini kalıtım yoluyla alıyor.
class PersonelException:ApplicationException
{
private double _maas;
//ctor'da üzerinde işlem yapacağı parametreyi atıyoruz.
public PersonelException(double maas)
{
_maas = maas;
}
//ve kalıtılan sınıfta Message özelliğini override ile eziyoruz.Bu sayede uygulama mantığımız doğrultusunda bir hata oluştuğunda istediğimiz hata mesajını ekrana yazdırabileceğiz.
public override string Message
{
get
{
return "Geçersiz maaş girişi.Girilen maaş 500-750 arasında olmalıdır.Değer:"+_maas;
}
}
}
}
Daha sonra Personel isimli class'ımızı yazarak 3 field tanımlıyoruz ve bu 3 field'leri property haline getirip Maas isimli property'de atanan değeri karşılaştırıyoruz.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Personel
{
//Personelimize ait 3 özelliği tanımlıyoruz.Buraya atanan maas özelliğini kontrol edeceğiz.
private string _ad;
private double _maas;
private string _soyad;
public string Ad
{
get { return _ad; }
set { _ad = value; }
}
public string Soyad
{
get { return _soyad; }
set { _soyad = value; }
}
//Personel sınıfımızın maaş isimli property'sinde get ve set bloklarını oluşturuyoruz.Get blogunda atanan değeri okuyoruz.Set blogunda ise atanan değeri kontrol etmek için bir if blogu yazıp value 500'ün üstünde ise ve 750'nin altında ise _maas isimli field'a değeri aktarıyoruz eger girilen deger 500-750 arsında değilse bu sefer else blogundan sonraki kod çalışarak önceden oluştrduğumuz PersonelException isimli exception class'ını çağırarak ctor'undaki parametreye hesaplama yapılacak olan değer yani value bilgisini vererek hata mesajını yazdırıyoruz.
public double Maas
{
get { return _maas; }
set
{
if (value > 500 && value < 750)
_maas = value;
else
throw new PersonelException(value);
}
}
}
}
Programımızda ise nesnemizi oluşturup Personel property'lerine değerleri atıyoruz.Eğer Maas property'sine istenmeyen değer girilirse catch blogunda tanımladığımız PersonelException isimli exception class'ının message özelliğini ekrana yazdırıyoruz.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//personel nesnemizi tanımlıyoruz.
Personel p1 = new Personel();
//try-catch blogu içerisinde property'lere değerleri atıyoruz.Eger p1 isimli nesnemizin Maas propertisine atanan değer 500-750 arasında değilse hata oluşacağından tanımladığımız catch bloguna düşerek oluşan hataya ait sınıftaki Message özelliğini kullanarak hata mesajını ekrana yazdıracağız.Eğer hata oluşmaz ise yani personelin girilen maaşı 500-750 arasında ise tüm değerleri ekrana yazdıracağız.
try
{
p1.Ad = "Serhat";
p1.Soyad = "Taş";
p1.Maas = 713;
Console.WriteLine("Ad:{0}\nSoyad:{1}\nMaaş:{2}", p1.Ad, p1.Soyad, p1.Maas);
}
catch(PersonelException pe)
{
Console.WriteLine(pe.Message);
}
Console.ReadLine();
}
}
}
Programımızı çalıştırdığımızda girilen Maas değeri 713 olduğundan ve bu 500-750 arasında olduğundan program düzgün çalışarak aşağıdaki görüntüyü oluşturacaktır.
Eğer Maas'a 1411 gibi istenmeyen bir değer atarsakta PersonelException sınıfında oluşturduğumuz hata mesajı ekrana yazılacaktır.
Bu şekilde kendi uygulamamızdaki mantığa göre istenmeyen durumlara karşı hata yakalama class'ları yazarak uygulama üzerindeki hakimiyetinizi arttırabilirsiniz.
İstisnai Durum örneğini indir
Faydalı olması dileğiyle iyi çalışmalar :)
Serhat TAŞ