Merhabalar, C# Try Catch Finally Kullanımı – Örnek İle Anlatım dersi ile C# Eğitim setine devam ediyorum. Bu dersimizde C# Try Catch Finally Nasıl Kullanılır? Ayrıntılı Anlatım buradaki ders ek olarak bir ders olması açısından bir örnek kullanım yapacağız. Tüm özellikleri tek bir örnek üzerinde, nasıl etkili bir şekilde kullanabileceğimizi göreceğiz.
C# Try Catch Finally Kullanımı – Örnek İle Anlatım
Ayrıntılı anlatım dersime giderseniz orada ayrıntılı bir anlatım görebilirsiniz. Bu dersimizde bir örnek üzerinden farklı bir anlatım yapmaya çalışacağım. Birden fazla Exception‘u yakalama, Exception‘lara özel mesaj kutuları çıkarmaya ve finally bloğunun kullanım amaçlarına bakacağımız bir yazı olacak.
Önce kodları verelim sonra üzerine konuşalım.
private void Form1_Load(object sender, EventArgs e) { int HataVarmi = 0; try { // işlemler } catch (ArgumentNullException ex) { HataVarmi = HataMesaji("İşlem yapılırken bir hata oluştu.", ex.Message, ex.GetType().Name); } catch (ArgumentException ex) { HataVarmi = HataMesaji("İşlem yapılırken bir hata oluştu.", ex.Message, ex.GetType().Name); } catch (IndexOutOfRangeException ex) { HataVarmi = HataMesaji("İşlem yapılırken bir hata oluştu.", ex.Message, ex.GetType().Name); } catch (FormatException ex) { HataVarmi = HataMesaji("İşlem yapılırken bir hata oluştu.", ex.Message, ex.GetType().Name); } catch (System.IO.FileNotFoundException ex) { HataVarmi = HataMesaji("İşlem yapılırken bir hata oluştu.", ex.Message, ex.GetType().Name); } catch (DivideByZeroException ex) { HataVarmi = HataMesaji("İşlem yapılırken bir hata oluştu.", ex.Message, ex.GetType().Name); } catch (NullReferenceException ex) { HataVarmi = HataMesaji("İşlem yapılırken bir hata oluştu.", ex.Message, ex.GetType().Name); } catch (OutOfMemoryException ex) { HataVarmi = HataMesaji("İşlem yapılırken bir hata oluştu.", ex.Message, ex.GetType().Name); } catch (InvalidCastException ex) { HataVarmi = HataMesaji("İşlem yapılırken bir hata oluştu.", ex.Message, ex.GetType().Name); } finally { if (HataVarmi == 1) { MessageBox.Show("İşlemler sırasında bir hata oluştu. Bu sebeple işlemler doğru olarak yapılamadı", "Hata Oluştu!", MessageBoxButtons.OK, MessageBoxIcon.Error); // işlemler sırasında çıkan hatadan dolayı yapılabilecek tüm işlemleri geri almak // isterseniz burada yapabilirsiniz. } else { MessageBox.Show("İşlemler başarı ile tamamlandı", "Başarılı!", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } /// <summary> /// Exceptions'lar için özel olarak düzenlenmiş hata mesajı çıkartır. /// </summary> /// <param name="AnaMesaj">Mesaj Kutusunda gösterilecek ana mesaj</param> /// <param name="Ex_Mesaj">Excepiton'dan dönen hata mesajı</param> /// <param name="Ex_Type">Dönen Exception'un tipi</param> int HataMesaji(string AnaMesaj, string Ex_Mesaj, string Ex_Type) { MessageBox.Show(AnaMesaj + Environment.NewLine + "Hata Tipi : " + Ex_Type + Environment.NewLine + "Hata Mesaj: " + Ex_Mesaj , "Hata Oluştu!" , MessageBoxButtons.OK , MessageBoxIcon.Error); return 1; }
Kod bloğunu inceleyelim;
- Yapmak istediğimiz bir takım işlemi tek bir try catch bloğuna aldık.
- Bu işlemler sırasında çıkabilecek tüm Exception‘ları tek tek yakadık.
- NOT: Kod bloğunda gördüğünüz ArgumentExcepiton ile ArgumentNullException’un sırası önemlidir. Çünkü ArgumentNullException, ArgumentExcepiton alt sınıfıdır. Bu yüzden üst sınıf olan ArgumentExcepiton ‘un altına ArgumentNullException yazarsanız hata alırsınız.
- Peki bunu neden böyle yapma ihtiyacı duyduk? Bunun sebebi ArgumentNullException’u özel olarak yakalamak istiyoruz. Diğer ArgumentExcepiton‘ları da genel olarak yakalamak istiyoruz.
- Exception‘ları yakaladıktan sonra, Exception‘ları bildirecek İnt geri dönüşü veren bir metod hazırladık. Bu metot 3 parametre alıyor. Kodlardaki Summary alanında açıklamaları görüyorsunuz.
- Bu metodun geri dönüş değerini 1 olarak ayarladık. Hata çıkmış ki bu metoda gelmişizdir. Bu yüzden varsayılan olarak 1 dönecek.
- Exception‘ların içinde hata mesajı çıkartacak metodumuzu çağırdık ve yakalanan Exception‘a özel mesajı çıkardık. Değer dönen bir metot olduğundan dolayı da dönen değeri bir değişkene atadık.
- Finally bloğuna geldiğimizde;
- Eğer bir hata verilmiş ise;
- Hata çıktığına ve işlemlerin tamamlanamadığına dair bir mesaj verdik. Burada yapılan işlemleri geri almak istersek geri alma işlemlerini yapabiliriz.
- NOT: Eğer hangi hatanın çıktığını bilmek istiyorsanız metodu string yapıp Excepiton tipini dönüş değeri olarak kullanarak çıkan Exception için geri alma işlemi yapabilirsiniz.
- Ama işlemlerin sonunda hata çıkmış olabilir ve işlemlerin yarım kalmaması için o anda yapılan tüm işlemleri geri almak daha mantıklı olacaktır.
- Eğer bir hata verilmemiş ise;
- İşlemlerin hatasız yapıldığına dair mesaj verdik.
- Eğer bir hata verilmiş ise;
C# Try Catch Finally Tavsiyeler
Finally bloğu her zaman çalıştırılır. Try = Dene, Catch = Yakala ve Finally = En Sonunda anlamlarına gelir. Try ve Catch bloklarından ikisinden biri çalışırken finally bloğu her zaman çalışır.
Try Catch bloklarının ikisi de mecburidir. İf Else de olduğu gibi sadece try yazıp bırakamazsınız. Catch bloğu zorunludur ama Finally bloğu zorunlu değildir.
Try Catch Finally komutu aslında çok kullanışlıdır. Ancak kullanımına ve kullanıldığı yere dikkat edilmesi gerekir. Çünkü bazen öyle durumlar yaşanıyor ki yanlış yerde kullandığınız try catch yüzünden alakasız yerde hatalar çıkabiliyor. Bu sebeple olabildiğinde az ve gerekli olduğunda kullanmak faydalı olacaktır.
Her hatayı try içerisinde almak çok yanlış bir davranıştır.
C# Try Catch Finally Kullanımı – Örnek İle Anlatım dersimde bu kadardı arkadaşlar. Diğer derslerimizde görüşmek üzere.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz… Bu dersi gerekli görmediğim için Github projeme eklemedim. Çünkü bir işlemi anlatmak için değil bilgi ve tavsiyeler vermek için yazdım.
Sildiğim dersleri de sayarsak (5 tane) bu yazı ile sitemde yayınladığım 400. yazıdır. :)
Sağlıcakla ve takipte kalın.