Application.Exception class’ını kullanarak kendimiz istisnai durumlar yaratabiliriz. Böylece bizim belirlediğimiz koşullarda da istisnai durum oluşmuş olur.
Class MyException
Inherits Exception
Public Sub New(ByVal Mesaj As String)
Console.WriteLine("MyException oluÅŸtu.")
End Sub
End Class
Sub Main()
Try
Throw New MyException("Hata OluÅŸtu !")
Catch ex As Exception
Console.WriteLine("Şu hata yakalandı :{0}", ex.ToString())
End Try
End Sub
class MyException : Exception {
public MyException(string Mesaj)
{
Console.WriteLine(Mesaj);
}
}//MyException
static void Main() {
try {
throw new MyException("Hata OluÅŸtu !");
}
catch (Exception ex){
Console.WriteLine("Şu hata yakalandı :{0}", ex.ToString());
}
}//Main
Hata oluÅŸtu.
Şu hata yakalandı :MyException: Exception of type MyException was thrown. at OrnekKod.Main() in <Dosya Adı>:line <Satır No>
Programımız içerisinde ölümcül bir hata oluştuğunda aktif bloğu daha önce işlediğimiz atlama ifadeleriyle(break, continue) sonlandırabiliriz. Böylece programın kırılmasını az zararla engellemiş oluruz.
System.Exception Üyeleri
İstisnai durumlar hakkında daha açıklayıcı bilgiler almak için System.Exception sınıfının üyelerini kullanırız. En çok kullanılan property’ler ÅŸunlardır;
HelpLink : Bu exception ile iliÅŸkilendirilmiÅŸ web safyasının adresini tutar. Kendi tanımladığımız exceptionda bu property’i set edebiliriz.
InnerException : Asıl exception’dan kaynaklanan istisnayı okumak için kullanılır. Try içinde hata oluÅŸtuÄŸu zaman catch’e atlar demiÅŸtik. Catch’de de meydana gelebilecek istisnayı öğrenmek için InnerException kullanılır.
Message : Hatanın nedenini açıklayan, hata kakkında bilgi veren içeriği bildirir.
Source : Hatanın oluÅŸtuÄŸu class veya uygulamayı ifade eder. EÄŸer exception içinde Source property’si set edilmemiÅŸse geriye hatanın yazıldığı Assembly adı döner. ÖrneÄŸin OverflowException hatası oluÅŸtuÄŸunda source olarak mscorlib döner.
StackTrace : İşe yarar bilgilerden biri olarak stacktrace, hatanın oluştuğu dosyanın adını ve satır bilgisini açıklar.
TargetSite : Hataya sebep olan metodun adını döndürür.
'MyException Class
Class MyException
Inherits Exception
Sub New(ByVal Mesaj As String)
MyBase.New(Mesaj)
End Sub
Sub New(ByVal Mesaj As String, ByVal Inner As Exception)
MyBase.New(Mesaj, Inner)
End Sub
End Class
'ExceptionYarat Class
Class ExceptionYarat
Sub HataUret()
Throw New MyException("HataUret metodu hatalı işlem yaptı.")
End Sub
Sub HataYakala()
Try
HataUret()
Catch ex As Exception
Throw New MyException("HataYakala catch'i de hatalı işlem yaptı.", ex)
End Try
End Sub
End Class
'Main Metodu
Sub Main()
Dim objOrnek As New ExceptionYarat
'ExceptionYarat.HataYakala içindeki catch'teki hatayı yakalamak için Main içinde try catch bloğu tanımlayalım.
Try
objOrnek.HataYakala()
Catch ex As Exception
Console.WriteLine("OluÅŸan Hata :{0}", ex.Message)
Console.WriteLine()
Console.WriteLine("Oluşan Hatanın InnerException'i :{0}", ex.InnerException)
End Try
End Sub
//MyException class
class MyException : Exception
{
public MyException(string Mesaj)
: base (Mesaj) {}
public MyException(string Mesaj, Exception Inner)
: base(Mesaj, Inner){ }
}
//ExceptionYarat class
class ExceptionYarat
{
void HataUret()
{
throw new MyException("HataUret metodu hatalı işlem yaptı.");
}
public void HataYakala()
{
try
{
HataUret();
}
catch (Exception ex)
{
throw new MyException("HataYakala catch'i de hatalı işlem yaptı.", ex);
}
}
}
//Main metodu
static void Main()
{
ExceptionYarat objOrnek = new ExceptionYarat();
try
{
objOrnek.HataYakala();
}
catch (Exception ex)
{
Console.WriteLine("OluÅŸan Hata :{0}", ex.Message);
Console.WriteLine();
Console.WriteLine("Oluşan Hatanın InnerException'i :{0}", ex.InnerException);
}
}
Oluşan Hata :HataYakala catch'i de hatalı işlem yaptı.
Oluşan Hatanın InnerException'i :OrnekKod.MyException: HataUret metodu hatalı işlem yaptı.
at OrnekKod.ExceptionYarat.HataUret() in C:\OrnekKod\
at OrnekKod.ExceptionYarat.HataYakala() in C:\OrnekKod \
Görüldüğü gibi, Main() metodu içinden HataYakala() metodunun içindeki Catch bloÄŸunda meydana gelen hataya eriÅŸmiÅŸ olduk. EÄŸer Main() içinde try catch kullanmamış olsaydık HataYakala() metodunun catch’inde meydana gelen hatadan dolayı program kırılırdı.




Recent Comments