|
Exception 2 (İstisnalar) |
|
Gönderiliyor lütfen bekleyin... |
|
|
Net platformu üzerinde istisna yönetimi ile ilgili daha önce bir makale yayınlamıştık. Şimdi ki makalemizde kendi istisnalarımızı oluşturmayı, Exception nesnesinden yeni istisna sınıfları türetmeyi ve istisnaları fırlatmayı göreceğiz
Programcılara çoğunlukla yazılım geliştirme aracının ( 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();
}
}
}
|
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.
}
}
}
} |
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);
}
}
}
}
|
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)
{
}
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.
İstisnalar ile ilgili kuralımızı yeniliyoruz. Gerekmedikçe istisna kullanmak program performansını düşürür. Fakat kritik noktalarda istisna kullanmak ve bu istisnaları yakalamak büyük kayıpları engeller. Bir sonraki makalemizde görüşmek üzere
Resul ÇAVUŞOĞLU
[email protected]
|