C# İstisna İşleme: Örneklerle Anlatım

C# İstisna İşleme: Örneklerle Anlatım

C# programlama dilinde istisna işleme konusuna odaklanan bu kitap, örneklerle adım adım anlatıyor Kendinizi C# istisna işleme konusunda geliştirmek istiyorsanız, hemen sipariş verin!

C# İstisna İşleme: Örneklerle Anlatım

C# programlama dili, güncel ve çok kullanılan bir programlama dili olmasının yanında, istisna işleme konusunda da detaylı bilgi ve örnekler sunar. İstisna, program sırasında karşılaşılacak hataları kontrol etmek ve hata mesajlarını kullanıcıya vermek için kullanılan bir yöntemdir. Bu makalede, C# programlama dili için istisna işleme konusunu örnekleri ile anlatan bir rehber sunulmaktadır. Okuyacak olanların bu konuyu gerek lisans çalışmaları, gerekse de projelerinde kullanabilecekleri özellikler de vardır.


İstisna Nedir?

C# programlama dilinde istisna, programın normal yürüyüşü sırasında beklenmeyen durumların ortaya çıkması durumunda kullanılan bir yapıdır. Bir hata oluştuktan sonra program normal şekilde çalışmaya devam edemez, bu yüzden istisna işleme yapılır.

İstisna işleme, hata yakalamanın en yaygın yöntemidir. Programcı, istisna durumu için önceden tanımlanmış kodlar oluşturarak, bu durumlar gerçekleştiğinde işlemlerin ne yapılacağı belirler.

try-catch bloğu kullanılarak, programcı hata durumunu öngörebilir ve ne yapılacağını belirtebilir. Eğer hata durumu gerçekleşirse, program kendi kendine sona ermez ve hata mesajı belirlenen şekilde çıktı olarak kullanıcılara sunulur.


try-catch Bloğu

Çalışırken, bir programda hatalar meydana gelebilir. Bazen bu hataların önceden tahmin edilemediği için program çöküyor. Bu durumda, kullanıcılara hata mesajları göstermek yerine, hatayı yakalayıp yönetmek gerekir. İşte bu noktada, C# programlama dili try-catch bloklarını kullanarak hataların nasıl yakalanıp yönetileceğini belirlemeye yardımcı olur.

Try-catch blokkarı, bir komutun çalıştırıldığı ve üretebileceği bir hata tanımlandığı bir bloktur. Kodlar try bloğu içerisine yerleştirilir ve hata oluştuğunda, catch bloğu çalıştırılır. Hata türü catch bloğundaki değişkenle belirlenir. Şu şekilde bir yapıya sahiptir:

try { //hata meydana getirme olasılığı olan kodlar buraya yazılır } catch (Exception ex) { //hata yönetim kodları buraya yazılır }

Try bloğu içerisindeki kodların hatasız şekilde çalışması durumunda, catch bloğu yok sayılır ve program devam eder. Ancak, try bloğu içindeki bir hata meydana gelirse, catch bloğu etkin hale gelir ve hataları yönetmek için ek kodlar yazılabilir.

  • Catch blokları, birden çok blok kullanarak farklı hata mesajları yönetmek için kullanılabilir.
  • Try bloğu dışında third-party APiler ile uyumlu hale getirmek için try-catch kullanılabilir.

finally Bloğu

C# programlama dilinde hata yakalamak için kullanılan try-catch bloğu, bir hata durumunda hatanın yakalanması ve işlenmesi için kullanılmaktadır. Ancak bazen try-catch bloğunda hata olsa da olmasa da çalışan kodlar yazmak isteyebiliriz. Bu durumda ise finally bloğu kullanılır.

Finally bloğu, try-catch bloğunda yer alan kod bloklarının çalışması bittikten sonra, try-catch bloğu içerisindeki herhangi bir hata durumunda bile çalıştırılacak olan kod bloklarını içerir. Finally bloğu, bir try-catch bloğu içerisine alınarak kullanılır ve try-catch bloğunun sonunda yer alır.

Finally bloğu, kaynak yönetimi ve bellek temizleme gibi çeşitli senaryolarda kullanılabilir. Bu blok içerisinde yer alan kodlar, her durumda çalıştırılmaktadır. Örnek olarak, veritabanı bağlantıları, dosya işlemleri ve benzeri durumlarda finally bloğunun kullanılması oldukça yararlıdır.

Aşağıdaki örneklerde, try-catch-finally blokları kullanarak bir dosyayı açıp okuyacağız. finally bloğunda ise dosyayı kapatacağız. Bu sayede hata alsak da almasak da dosya her zaman kapatılacaktır.

Kod Açıklama
FileReader file = new FileReader("test.txt");try {  // dosyayı oku} catch (IOException e) {  // hata durumunda yapılacak işlemler} finally {  file.close();}      
Bir dosyayı okurken finally bloğunu kullanma örneği.

Bu örneklerde, dosya işlemleri için finally bloğu kullandık ancak farklı senaryolarda da kullanılabilir. Finally bloğu, C# programlama dilinde hatalı kodları yönetmek için oldukça yararlı bir araçtır.


return İfadelerinin finally Bloğunda Kullanımı

C# programlama dilinde hatalar genellikle try-catch blokları kullanılarak yönetilir. Ancak, bazen bir fonksiyon sonlandığında ya da bir hata oluştuğunda belirli bir işlem yapmak isteyebilirsiniz, bu durumlarda finally blokları kullanılır. Finally blokları, çalıştırılması gereken kodları içerir ve try-catch bloklarının çalışmasından sonra dahi çağrılır. Return ifadesi ise bir fonksiyondan çıkmanızı sağlar. Bir fonksiyonda bir return ifadesi bulunursa, fonksiyondan geriye kalan kodlar çalıştırılmaz.

Return ifadesi, sonucun kontrol edilmesi gereken işlemlerde kullanılır. Eğer işlem bir hata fırlattıysa, sonucun doğruluğundan emin olamazsınız. Ancak finally bloğunda, hata olsun ya da olmasın çalışan kodları kullanarak, kodunuzun düzgün çalışmasını sağlayabilirsiniz. Böylece, fonksiyondan doğru şekilde çıkılır ve geriye istenilen sonuç döndürülür.

Kod Sonuç
        public int Divide(int num1, int num2) {           try {              return num1/num2;           }           catch (DivideByZeroException e) {              Console.WriteLine("Zero division error!");              return 0;           }           finally {              Console.WriteLine("Finally block is executed.");           }        }      
Num2 sıfır olduğunda DivideByZeroException hatası oluşur ve try bloğundan çıkılır. Daha sonra, catch bloğu çalışarak 'Zero division error!' mesajını ekrana yazar ve fonksiyondan 0 döndürür. En son olarak da, finally bloğu çalışarak 'Finally block is executed.' mesajını ekrana yazar.

Bu örnekte, Divide fonksiyonu bir sayıyı başka bir sayıya böldüğünde, DivideByZeroException hatasını yakalayan bir try-catch bloku kullanılmıştır. Eğer bir hata oluşursa, catch bloğu çalışır ve fonksiyondan geriye 0 değeri döner. Ancak, finally bloku her zaman çalışacağından 'Finally block is executed.' mesajı ekrana yazdırılır. Bu şekilde, hata oluşsa da olmasa da kodunuzun düzgün çalışması sağlanır.


using İfadelerinin finally Bloğunda Kullanımı

using İfadelerinin finally Bloğunda Kullanımı

C# programlama dilinde using ifadesi, çalıştığı bloktaki kaynakları otomatik olarak bellekten silmek için kullanılır. Bu ifade kesinlikle finally bloğu içinde kullanılmalıdır. finally bloğu, kod her ne kadar try/catch bloklarından sonra hata alsın ya da almasın, çalıştırılması gereken kod bloğudur. using ifadesi ise try bloğundan önce çalıştırılmalıdır. Böylece using ifadesi işi bitirdiğinde kaynakları otomatik olarak bellekten siler.

Aşağıdaki örnek kod bloğunda using ifadesi, SqlConnection nesnesine bağlandıktan sonra, finally bloğu içinde otomatik olarak bağlantıyı kapatır:

try{    SqlConnection connection = new SqlConnection("connectionString");    connection.Open();    // işlemler...}catch (Exception ex){    // hata işleme...}finally{    using (connection)    {        connection.Close();    }}

Bu örnek blokta, SqlConnection nesnesi içinde çalıştırdığımız kodlar için try bloğu içinde yerleştirdik. Ayrıca SqlConnection nesnesine bağlantı sağladıktan sonra, using bloğu içinde bağlantının kapatılmasını sağlayarak, bellekte gereksiz yere yer kaplamasının önüne geçtik.


throw İfadesi

C# programlama dilinde, bir istisna meydana geldiğinde, programın normal çalışması durur ve çalışma zamanı hatası fırlatılır. Ancak, programcı istisna fırlatma işlemini de gerçekleştirebilir. Bu işlem için throw ifadesi kullanılır.

throw ifadesi, belirli bir mesajı olan bir istisna nesnesi fırlatır. Böylece programcı, hata durumunda istediği mesajı kullanıcıya göstererek, hatanın nasıl düzeltilebileceğine dair ipuçları verebilir. Örneğin:

try{    int sayi = Convert.ToInt32(Console.ReadLine());    if (sayi == 0)        throw new Exception("Sıfıra bölme hatası.");    double sonuc = 100 / sayi;    Console.WriteLine("Sonuç: " + sonuc);}catch(Exception ex){    Console.WriteLine(ex.Message);}

Yukarıdaki kod örneğinde, kullanıcı 0 girdiğinde, programcı throw ifadesi ile "Sıfıra bölme hatası." mesajını kullanan bir Exception nesnesi fırlatır ve bu mesajı kullanıcıya gösterir.

  • throw ifadesi, sadece catch blokları içinde kullanılabilir.
  • throw ifadesi, catch bloğu dışındaki kodların çalışmasına engel olur.
  • İstisna nesneleri, Exception sınıfından türetilen sınıflar olabilir.

Kendi İstisna Sınıfları Oluşturma

Bir C# programında kendi özel istisnalarımızı oluşturmak istediğimizde, öncelikle yeni bir istisna sınıfı oluşturmamız gerekir. Bu sınıf, System.ApplicationException sınıfını miras almalıdır. Ardından, özel mesajlarımızı eklemek için sınıf içerisinde uygun bir kurucu metot oluşturabiliriz.

Örnek Kod:
      class OzelIstisna : ApplicationException      {          public OzelIstisna(string mesaj) : base(mesaj)          {              // Özel mesajlar buraya eklenir          }      }      

Oluşturduğumuz bu özel istisna sınıfını kullanırken, try-catch bloklarında normal bir istisna sınıfı gibi kullanabiliriz. Özel mesajlarımızı da kurucu metotta göndererek istisna mesajlarımızı verimli bir şekilde oluşturabiliriz.

Örnek Kod:
      try      {          throw new OzelIstisna("Özel hatamız oluştu!");      }      catch(OzelIstisna ex)      {          Console.WriteLine(ex.Message);      }      

Bu örnekte, try bloğunda OzelIstisna sınıfından bir nesne oluşturuyoruz ve bir özel mesaj gönderiyoruz. Ardından, catch bloğunda hatayı yakalıyoruz ve mesajı ekrana yazdırıyoruz.

Kendi özel istisna sınıflarınızı oluşturmak, programlarınızda daha anlaşılır ve özelleştirilebilir hata mesajları geçirmenizi sağlayabilir. Ayrıca, kodunuzdaki hataları daha iyi yönetebilirsiniz.


Özel İstisna Sınıfları

C# programlama dilinde özel istisna sınıfları, kullanıcı tanımlı hataları gidermek için kullanılır. Bu sınıflar, Exception sınıfından türetilir ve özel hata mesajları ve özellikleri ile birlikte gelir.

Özel istisna sınıfları oluşturmak için, Exception sınıfından türetilen bir sınıf oluşturmanız gerekir. Bu sınıf, istisna durumu için bir hata mesajı ve gerekirse ek özellikler içerebilir. Örneğin, bir dosya okuma hatasının tetiklenmesi durumunda, özel bir istisna sınıfı oluşturarak hata mesajına dosya adını ve hatanın nedenini ekleyebilirsiniz.

Bir özel istisna sınıfı oluştururken, sınıf adını neyin tetikleyeceğine göre belirleyin. Ayrıca, hata mesajı ve ek özellikler de sınıfın kullanım amacına uygun şekilde belirlenmelidir. Özel istisna sınıfları, kodun daha kolay okunmasını ve bakımını yapmasını sağlar, çünkü hatanın kaynağını daha kolay bir şekilde belirleyebilirsiniz.

Sınıf Adı Açıklama
FileReadException Dosya okuma hatası için kullanılır
ConnectionException Veritabanı bağlantı hatası için kullanılır
AuthenticationException Giriş kimlik doğrulama hatası için kullanılır

Özel istisna sınıfları ayrıca birden fazla dilde hata mesajları içerebilir, böylece kullanıcıya isteğe bağlı olarak belirli bir dilde hata mesajı gösterilebilir.

Özetlemek gerekirse, özel istisna sınıfları kodun daha okunaklı ve bakımı daha kolay hale getirmek için kullanılır. Bu sınıflar kullanıcının tanımladığı hataları gidermek için kullanılır ve Exception sınıfından türetilirler. Yeni bir sınıf oluşturulduğunda, sınıf adı, hata mesajı ve ek özellikler isteğe bağlı olarak belirlenmelidir.


Exception Sınıfı

C# programlama dilinde hata yönetimi için kullanılan bir başka önemli sınıf Exception'dır. Bu sınıf, uygulamamızda oluşan hataların nedenini daha detaylı bir şekilde tanımlanmasını sağlar.

Exception sınıfı, uygulama çalışırken bir hata oluştuğunda yaratılan bir nesnedir. Bu sınıf, hata türünü belirtmek için kullanılan Message özelliği ile birlikte hata hakkında detaylı bilgi sağlar.

Özellik Açıklama
Message Hataya ilişkin bir açıklama içerir.
InnerException Daha önce oluşmuş olan bir hataya ilişkin bilgi içerir.
StackTrace Hatanın oluştuğu yöntem ve satırları içerir.
Source Hatanın kaynağının adını içerir.

Exception sınıfı, ayrıca try-catch bloklarında kullanılarak hata yakalama işlemlerinde kullanılır. Bu sayede, uygulamamızda oluşan hataları yakalar ve bizim belirlediğimiz şekilde işleme koyar.

Örneğin, bir dosyayı okurken dosyanın olmadığını fark edersek Exception sınıfını kullanarak bir hata oluşturabiliriz ve bu hatayı try-catch bloklarında yakalayabiliriz. Böylece, olası bir hata durumunda uygulamamızın çökmesini önleyebiliriz.


checked ve unchecked İfadeleri

C# dili işlem yaptığı veriler için varsayılan olarak tür kontrolü gerçekleştirir. Ancak, bazen bir operasyon sırasında aritmetik taşmalar veya kesirleşmeler gibi hata durumları ortaya çıkabilir. İşte bu tür hataları yakalamak için C# dilinde checked ve unchecked ifadeleri kullanılabilir.

checked ifadesi, programcının işlem sırasında meydana gelebilecek hata durumlarını yakalamasına yardımcı olur. Eğer bir checked ifadesi bloğunda hatalı bir operasyon yapılırsa, programa ArithmeticException hatası fırlatılır. Aşağıdaki örneğimizde bir checked ifadesi kullanarak taşmaya neden olan bir işlemi yakalıyoruz:

Kod Çıktı
          int a = 2147483647;          int b = 2;          try           {            int result = checked(a * b);            Console.WriteLine(result);          }           catch (System.OverflowException e)           {            Console.WriteLine("{0} Arithmetic operation overflow", e);          }        
          System.OverflowException: Arithmetic operation resulted in an overflow.        

unchecked ifadesi ise, hata durumlarını yakalamadan işleme devam etmenizi sağlar. Hangi operasyonlar unchecked ifadesi içinde yapılırsa, hata durumlarına karşı kontrol edilmez. Aşağıdaki örneğimizde, bir unchecked ifadesi kullanarak bir taşma hatasından kaynaklanan hatalı çıktıyı görebilirsiniz:

Kod Çıktı
          int a = 2147483647;          int b = 2;          int result = unchecked(a * b);          Console.WriteLine(result);        
          -2        

checked ve unchecked ifadeleri, aritmetik işlemlerinde hata durumlarını kontrol etmek için kullanılır. Programcılar, bu ifadeleri kullanarak hatayı istedikleri şekilde yönetebilirler.


ArithmeticException

C# programlama dilinde ArithmeticException sınıfı, matematiksel bir işlem sırasında hata meydana geldiğinde oluşan istisnaları yönetmek için kullanılır. Bu sınıf, hatalı işlemler sonucunda oluşan matematiksel hatalar için özelleştirilmiştir. Örneğin, bir programda sıfıra bölme işlemi yapılırsa, bu durumda ArithmeticException sınıfı kullanılarak istisna yönetimi sağlanır.

Bu sınıfın kullanımı oldukça basittir. Programcılar, matematiksel işlemler yaparken, hataların nereden kaynaklandığını ve nasıl çözüleceğini tanımlayabilirler. ArithmeticException sınıfı, temel istisna sınıflarından biridir ve C# programlama dilinde kullanılan istisna sınıfları arasında yer almaktadır.

ArithmeticException sınıfı özellikle matematiksel işlemler sırasında ortaya çıkabilecek hataları yakalamak için kullanılır. Örneğin, bir sayı sıfıra bölündüğünde ya da sayılar arasında matematiksel işlemler yapıldığında geçersiz bir işlem sonucu oluşabilir. Bu tip hatalar ArithmeticException sınıfı yardımıyla yönetilebilir.

ArithmeticException sınıfı, .NET Framework tarafından sağlanmaktadır ve C# programlama dilinde istisna yönetimi için önemli bir yere sahiptir. Programcılar, bu sınıfı kullanarak matematiksel işlemler sırasında oluşabilecek hataların önüne geçebilirler. Bu sayede, programların daha güvenli ve sağlam bir şekilde çalışması sağlanmaktadır.


DivideByZeroException

C# programlama dilinde DivideByZeroException sınıfı, matematiksel işlemler sırasında sıfıra bölme hatasını yakalamak için kullanılır. Bu sınıfı kullanarak bir blokta sıfıra bölme hatasını tespit edip, hatayı özelleştirebilir ve kullanıcıya daha anlaşılır bir hata mesajı gösterebilirsiniz.

DivideByZeroException sınıfı, Exception sınıfından türetilmiştir ve ArithmeticException sınıfının altında yer alır. Bu sınıfın özellikleri arasında Message, InnerException, StackTrace, HelpLink ve Source yer almaktadır.

Örneğin, aşağıdaki örnek kod bloğunda, kullanıcı tarafından girilen 2 sayısı 0'a bölündüğünde DivideByZeroException hatası alınacaktır:

try{     int num1 = Convert.ToInt32(Console.ReadLine());     int num2 = Convert.ToInt32(Console.ReadLine());     int result = num1 / num2;}catch(DivideByZeroException ex){     Console.WriteLine("Sıfıra bölme hatası:" + ex.Message);}

Bu örnekte, kullanıcıya daha özelleştirilmiş bir hata mesajıyla birlikte Sıfıra bölme hatası çıktısı verilecektir. Bu şekilde kullanıcının hata nedenini daha iyi anlaması sağlanır ve programınıza olan güveni artar.