C# Exception Handling | “throw” Kullanımı – Bölüm 1
  1. Anasayfa
  2. C#

C# Exception Handling | “throw” Kullanımı – Bölüm 1

0

C# gibi modern dillerde, alınan hatalar genellikle Exception‘lar ile modellenir. Bu hataların sebebi genel olarak beklenmeyen sorunlardır. Uygulamalar, hatayı anlaşılır şekilde handle etmek için Exception Handling yapılarını kullanırlar. C# Exception Handling serisinin ilk bölümünde “throw” kullanımını örnekleriyle birlikte inceleyeceğiz.

Exception’lar kötüye kullanılması kolay olan yapılardan birisidir. Aynı zamanda yanlış kullanımı söz konusu olduğunda Exception Handling yapıları oldukça tehlikelidir. Uygulamalarda gerekli bir Exception handle edilmemiş olabilir ya da geçerli bir sebep olmadan throw edilmiş olabilir. Bu gibi durumlar hem son kullanıcı için hem de hatayla ilgili analiz yapan kişiler için anlam karmaşıklığına sebep olur. Bir hata anında çözüm için dump analizlerine, environment üzerinde bulunan tüm log kayıtların incelenmesine kısaca zaman kaybına yol açabilir. Oysaki Exception Handling doğru şekilde implement edildiğinde uygulamalara can veren, kullanıcılar ile konuşmasını mümkün kılan, karşısındakine derdini anlatmasını sağlayan çok önemli yapılardan birisidir.

Resim – 1

Anlatımlar için kullanılacak senaryo Resim – 1’de görülmektedir. Basit bir hiyerarşi ile ConsoleApp üzerinden LayerFirst‘e ilk call yapılmaktadır. LayerFirst ise LayerSecond’a ikinci bir call yapmaktadır. LayerSecond’da bulunan code bloğu içerisinde DevideByZeroException’ı bulunmaktadır. Artık farklı throw kullanımlarını incelemeye başlayabiliriz.

‘throw ex;’ Kullanımı

İlk örneğimizde SecondLayer’da bulunan DevideByZeroException ‘throw ex;’ ile fırlatılmıştır. Fakat senaryoda Exception LayerSecond’da olmasına rağmen Source olarak LayerFirst görülmektedir. Ayrıca StackTrace incelendiğinde LayerFirst sonrası call’lar görülmemektedir. (Resim – 2)

Resim – 2

‘throw ex;’ Kullanımının Dezavantajları:

  • ‘throw ex;’ kullanımı ile önceki StackTrace bilgisi kaybolur.
  • Source bilgisi doğru noktayı refere etmez.
  • Root Cause analizi ve Troubleshooting oldukça zorlaşır.
  • Exception’ın daha anlamlı olması için manipülasyon gerekir.

 

‘throw;’ Kullanımı

İkinci örneğimizde SecondLayer’da bulunan DevideByZeroException ‘throw;’ ile fırlatılmıştır. Source olarak LayerSecond görülmektedir. Ayrıca StackTrace incelendiğinde Call Pipeline’ı boyunca oluşan tüm call’lar görülmektedir. (Resim – 3)

Resim – 3

‘throw;’ Kullanımının Avantajları:

  • ‘throw;’ ile önceki StackTrace bilgisi kaybolmaz.
  • Source bilgisi Exception’ın gerçekleştiği noktayı refere eder.
  • Root Cause analizi ve Troubleshooting kolaydır.

 

‘throw new CustomException();’ Kullanımı

User-defined Exception’lar için best practices olarak önerilen; eğer Predefined Exception Type’lar ihtiyacı karşılıyorsa, uygun olan Exception Type kullanılmalıdır.

  • ArgumentException
  • ArgumentNullException
  • ArgumentOutOfRangeException
  • AccessViolationException
  • IndexOutOfRangeException
  • InvalidOperationException

Eğer karşılamıyorsa, Exception sınıfından yeni bir Class türetilmeli ve Custom Exception Class’ı için 3 adet Constructor oluşturulmalıdır.

  • CostumException( )
  • CustomException(String)
  • CustomException(String, Exception)

Custom Exception’lar uygulama içerisinde kullanılırken çok dikkatli olunmalıdır. Yanlış kullanımlar daha anlamsız Exception’lara sebep olabilir.

Avantajları:

  • Technical Exception ile Business Exception’ların birleştirilmesine olanak sağlar.
  • Business ve Technical Exception detayları bir arada olduğu için Root Cause analizi ve Troubleshooting daha anlamlı ve kolaydır.

Dezavantajları:

  • StackTrace ve Source bilgisi Exception üzerinde kaybolabilir ya da yanlış noktayı refere edebilir.

 

‘throw’ kullanımlarını örnekleriyle birlikte inceledik. Umarım sizler için de faydalı bir paylaşım olmuştur.

Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar      

www.mshowto.org  

https://docs.microsoft.com/en-us/dotnet/standard/exceptions/best-practices-for-exceptions

https://docs.microsoft.com/en-us/dotnet/standard/exceptions/how-to-create-user-defined-exceptions

TAGs: C#, Exception Handling, Exception, User-defined Exceptions, Custom Exception, throw, try/catch, .Net Framework, .Net 5.0, Visual Studio 2019, Visual Studio

Bu İçeriğe Tepkin Ne Oldu?
  • 23
    harika_
    Harika!!
  • 1
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 1
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 2
    k_zd_m_
    Kızdım!

Lisans eğitimini Sakarya Üniversitesi Bilgisayar Mühendisliği bölümünde tamamladı. Mezun olduktan sonra farklı sektörlerde ERP, CRM, Operasyon, POS, Finans, Bankacılık ve AML uygulamaları üzerine çalışma fırsatı buldu ve kariyerine finans sektörünün öncü firması olan Fineksus'ta devam etmektedir. Farklı platformlar ve yazılım dilleri ile web, mobil uygulamalar ve ürün geliştirme konularında deneyime sahip. Genel olarak Microsoft Teknolojileriyle ilgilenen Sertaç, .NET stack, C#, Web Services, SOAP, REST, ASP.NET, ASP.NET Core, MSSQL, PostgreSQL ve Node.js teknolojileri ile uygulama geliştirme tecrübesi edindi ve yeni teknolojiler öğrenmeye, öğrendiklerini paylaşmaya devam etmektedir.

Yazarın Profili
İlginizi Çekebilir

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir