Programalama > C#

Etiketler: istisnalar

Ort. 0
Puan ver:
c# ta istisnalarla uğraşmak..

İyi bir programcı aslında iyi bir problem avcısıdırda. Bu nedenle yazdığımız programlarda problemlerim oluşmasını engellemek veya bu problemleri doğru bir şekilde kullanıcıya bildirmek bence çok önemli..  Örneğin kullanıcı varolmayan bir dosyayı açmaya çalıştı , bir diziye çok fazla değer atandı, bir prosedür boş bir değeri , referans değişken olarak kullanmaya çalıştı veya bir string değeri bir tamsayı değişkene atatamaya çalıştınız...vs

C#, istisnalarla uğraşırken bize iki anahtar kelime sunar try ve catch. Kodunuzda istisnaya yol açabilecek satırları try ifadesi ile sararsınız. Bu ifade ile sardığınız satırlarda bir istisna olduğunda bu catch ile yakalanır. Bir örnekle inceleyelim.. 

using System;
class Hata
{
    public static void Main()
      {
           int[] diziler=new int[4];
           try {
                 for(int i=0;i<5;i++)//dizinin 5 elemanı yok diziler[i]=i;
                }
           catch {
                        Console.WriteLine("bir hata var");
                     }
         }
}

Bu programı çalıştırdığınızda ekrana "bir hata var" mesajı gelecektir. çünkü 4 elemanlı dizinin olmayan elamanlarına ulaşılmaya çalışılmakta ve buda bir istisnaya neden olmaktadır. oluşan istisna try ifadesinin sardığı kısımda gerçekleştiğinden kontrol catch ifadesine aktarılmıştır ve buda ekrana bizim mesajımızın gelmesini sağlamıştır. 

C# ,System isim alanı içerisinde Exception tipi tanımlanmıştır. Oluşan istisnaların tanımlarına ulaşmak istiyorsak Exception kullanırız. yukarıdaki programımızda catch kısmını şu şekilde değiştirelim..

catch(Exception e) {
              Console.WriteLine("bir hata var hata:{0}",e);
         }

programımız çıktı olarak e değişkenine aktarılan istisnayı yani IndexOutOfRangeException bilgisini aktaracaktır.  Progaramınız içerisinde istisna olsada olmasada çalıştırılmasını istediğiniz kod blokları  var ise C# bunu yapmak için finally anahtar kelimesini kullanır. finally bloğu içerisine yazdığınız kod herzaman çalıştırılır. Yukarıdaki örneğimizi düzenlerisek:

  catch(Exception e) {
                  Console.WriteLine("bir hata var:{0}",e);
           }
   finally {    Console.WriteLine("hata işleme sona erdi");     }

finally bloğu hata oluşmasa bile herzaman çalışacaktır..

C# ta istisnalara hükmetmek

Eğer kendi istisna sınıflarınızı tanımlamak istiyorsanız c# buna imkan sağlamaktadır. Kendiniz bir istisna sınıfı yarattı iseniz bir şekilde bu istisnanın oluşmasını isteyeceksinizdir. Bunu sağlamak içinde  throw anahtar kelimesini kullanmalısınız. Yukarıdaki örnekte tanıştığımız dizi ile ilgili istisnayı hatırlarsak..

using System;
class HataYap
{
    public static void Main()
      {
              Console.WriteLine("hata öncesi"); 
              throw ( new    IndexOutOfRangeException  );
              Console.WriteLine("hata sonrası"); 
         }
}

bu programcık IndexOutOfRangeException  istisnasın fırlatmaktadır. Yani sistem bu istisna oluşmuş gibi davranılmaya zorlanılmaktadır. try ve catch kullanmış olsaydık programımız hemen catch bloğuna dallanmış olacaktı..

Kendi istisnalarımızla kodu geliştirmek

C# ta kendi istisna sınıflarınızı oluşturabileceğinizden yukarıda bahsettim. Bir  istisna sınıfını aşağıdaki şekilde bildiririz.

class hataismi : Exception { }

buradaki Exception kelimesi muhakkak kullanılmalıdır. çünkü catch( Exception e ) ifadesini hatırlarsak ,  hatalar bu sınıftan türedilmektedir. bir örnekle açıklayalım

using System;
class istenmeyenKelime : Exception { }
class Programim
    { 
         class Kelimeler
          {
            static public string kelime(string yazilan)
             {
                  if(yazilan="geveze")
                   throw( new istenmeyenKelime ());
                  return "uyari";
              }
           }
        public static void Main()
        {
          string sonuc;
           try
              {
                sonuc=Kelimeler.kelime("geveze");
                Console.WriteLine("bir hata oldu:{0}",sonuc);
               }
               catch(istenmeyenKelime)
              { 
              Console.WriteLine("hata oluştu");
              }
        }
} 


Örneğimizde kullanıcının geveze kelimesini girdiği varsayılarak programın istenmeyenKelime istisnasını üretmesi istenmiştir. try ,catch ile bu istisna yakalanmış ve uygun çıktılar gösterilmiştir. İstisna tanımımızdaki  bloklar arasına uygun mesajlar koyarak 

class istenmeyenKelime : Exception {  Console.WriteLine("bu kelimeyi yazma");                   }

programınızı geliştirebilirsiniz.

Hatasız ve  sorunsuz günler dileğimle sevgilerimi ve saygılarımı sunuyorum...

Yoldaş Erdoğan 

yoldase@yahoo.com


Yorumlar                 Yorum Yaz
Bu hazır kod'a ilk yorumu siz yapın!
KATEGORİLER
ASP - 240
ASP.NET - 24
C# - 75
C++ - 174
CGI - 8
DELPHI - 247
FLASH - 49
HTML - 536
PASCAL - 246
PERL - 11
PHP - 160
WML - 9
XML - 2
Copyright © 2002 - 2024 Hazır Kod - Tüm Hakları Saklıdır.
Siteden yararlanırken gizlilik ilkelerini okumanızı tavsiye ederiz.
hazirkod.com bir İSOBİL projesidir.