( Visual
Studio.NET) sunmuş olduğu istisna sınıfları yeterli gelmektedir. Bununla
birlikte özel bir bileşen geliştirme aşamasında bazen özel istisnalara ihtiyaç
duyarız. Bu bileşen içerisinde meydana gelen hataları kendimiz yönetmek
isteriz. Öncelikle istisnaları isteğimize bağlı ortaya çıkartmayı göreceğiz.
THROW ifadesini kullanma :
Throw ifadesi istisnaları istediğimiz anda ortaya çıkartmamıza imkan
vermektedir. Throw ifadesi Exception sınıf veya bu sınıftan türetilmiş herhangi
bir istisna sınıfı için kullanılır. Throw ifadesinin kullanıldığı noktada
program durarak; istenilen istisnayı üretir. Bu istisna daha önceki makalemizde
anlattığımız gibi yönetilebileceği gibi, hata mesajından da yararlanılabilir. Aşağıda
throw kullanımına ait bir kaç örnek bulunmaktadır.
using System;
namespace Exception2
{
class Istisnalar
{
[STAThread]
static void Main(string[] args)
{
throw new Exception();
}
}
}
namespace Exception2
{
class Istisnalar
{
[STAThread]
static void Main(string[] args)
{
throw new Exception();
}
}
}
Yukarıda ki örnekte istisna temel sınıf olan Excepition nesnesinden oluşturulmuştur.
Bu hata try catch, finally blokları ile
yakalanabilir. Exception nesnesinin 3 çeşit yapıcısı bulunmaktadır. Farklı yapıcıların
kullanıldığı bir örnek aşağıda bulunmaktadır.
using System;
namespace Exception2
{
class Istisnalar
{
[STAThread]
static void Main(string[] args)
{
try
{
throw new Exception(); // İstisna oluşur fakat herhangi bir özel mesaj yoktur.
throw new Exception("Benim istisna mesajım"); // İstisna oluşur ve özel hata mesajı üretirlir.
}
catch (Exception e)
{
Console.WriteLine(e.Message);
throw new Exception("Hata Meydana Geldi",e); // Hata mesajı ile birlikte dışardan oluşan hata sınıfa gönderilir.
}
}
}
}
namespace Exception2
{
class Istisnalar
{
[STAThread]
static void Main(string[] args)
{
try
{
throw new Exception(); // İstisna oluşur fakat herhangi bir özel mesaj yoktur.
throw new Exception("Benim istisna mesajım"); // İstisna oluşur ve özel hata mesajı üretirlir.
}
catch (Exception e)
{
Console.WriteLine(e.Message);
throw new Exception("Hata Meydana Geldi",e); // Hata mesajı ile birlikte dışardan oluşan hata sınıfa gönderilir.
}
}
}
}
Yukarıda ki örneğimizde Exception temel istisna sınıfı kullanılarak 3
farklı şekilde istisna ortaya çıkartılmıştır. 1. şekilde ortaya çıkan hata ile
ilgili herhangi bir mesaj verilmekmektedir. 2. şekilde ise ortaya çıkan istisna
ile birlikte bir hata mesajı da mevcuttur. 3. şekilde
ise ortaya çıkan genel bir hatadan isteğimize bağlı bir hata üretilmesi sağlanmış
ve dışarıda oluşan genel hata kullanılan hata sınıfına bildirilmiştir. Şu an
için son yöntem bir şey ifade etmiyor gibi gözüksede ileriki satırlarımızda
kendi istisna nesnemizi oluşturduğumuzda innerexception diye adlandırılan bu
istisna referansı tarafımızca kullanılabilecektir.
Throw ifadesi Exception sınıfından türetilmiş istisna
sınıfları içinde kullanılabilir.
using System;
namespace Exception2
{
class Istisnalar
{
[STAThread]
static void Main(string[] args)
{
try
{
throw new DivideByZeroException(); // sıfıra bölünme istisnası isteğe bağlı oluştu.
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
namespace Exception2
{
class Istisnalar
{
[STAThread]
static void Main(string[] args)
{
try
{
throw new DivideByZeroException(); // sıfıra bölünme istisnası isteğe bağlı oluştu.
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
Yukarıdaki örneğimizde
DivideByZeroException istisnasının ortaya çıkmıştır. Bu istisna sonucu olarak
ekrana Attampted to divide by zero istisna mesajı gözükecektir.
Exception nesnesinden istisna sınıfları türetme :
İstisna
sınıflarının tamamı Exception temel sınıfından yaratılmıştır. Her alanda çeşitli
istisna sınıfları olduğunu önceki makalemizde söylemiştik. Peki çok özel bir
istisna sınıfına ihtiyacımız olursa ne yapmamız gerekir. Başlığımızdan da anlaşılacağı
gibi kendi sınıfımızı türetmemiz yeterlidir. Bu sınıf içerisinde istisna
meydana geldiğinde istediklerimizi yapacak kodları bulundurabiliriz.
Temel
Exception sınıfı üzerinde çeşitli özellikler ve methodlar bulunmaktadır. Bu
özellik ve methodlar ezilerek kullanılabilceği gibi isteklerimiz doğrultusunda
yeni özellikler ve methodlarda ekleyebiliriz. Oluşturulan bu istisna sınıf
throw ifadesi ile ortaya çıkartılabilir.
Şimdi
bilinenlerden farklı ihtiyaçlarımıza bağlı bir istisna sınıfı oluşturalım. Bu
istisna sınıfı her kullanıldığında ürettiği hata mesajını bir dosyanın içinde
barındırabilsin. Tabiki ihtiyaçlarınız doğrultusunda bu bir veritabanı da
olabilir.
using System;
namespace Exception2
{
class Istisnalar
{
[STAThread]
static void Main(string[] argös)
{
try
{
throw ResulException("Hata Oluşturuyorum");
}
catch(ResulException e)
{
e.LogYaz("c:\hatalar.txt");
Console.WriteLine(e.Message);
}
}
}
class ResulException : Exception
{
public ResulException():base()
{
}
public ResulException(string tempmessage):base(tempmessage)
{
namespace Exception2
{
class Istisnalar
{
[STAThread]
static void Main(string[] argös)
{
try
{
throw ResulException("Hata Oluşturuyorum");
}
catch(ResulException e)
{
e.LogYaz("c:\hatalar.txt");
Console.WriteLine(e.Message);
}
}
}
class ResulException : Exception
{
public ResulException():base()
{
}
public ResulException(string tempmessage):base(tempmessage)
{
}
public void LogYaz(string logfile)
{
......................................
...............................
...............................
}
}
}
public void LogYaz(string logfile)
{
......................................
...............................
...............................
}
}
}
Örneğimizde Exception sınıfından ResulExcepiton isminde bir sınıf
türettik. Bu sınıf Exception sınıfına ait yapıcı methodlara base göndermese yapıyor.
Temel olarak Exception sınıfının özelliklerini kullanabiliyor. Bu özelliklere
ek olarak belirtilen dosya içine isteğimize bağlı olarak hata mesajlarını yazıyor.
Bu şekilde ki istisna sınıfı kullanarak bir hatalar günlüğü tutmamızda mümkün
olabilir.
Hiç yorum yok:
Yorum Gönder