Program derlenirken yada çalışırken oluşan hataları, istisnaları yönetme işlemine exception handling denilmektedir. Programda hataları yakalamak ve işlemek için try catch blogu kullanılır. Programın çalışması için gerekli kodları try blogu içine yazarız. Hataları yakalamak işini catch bölümünde yaparız. Bir try catch blogunda duruma göre spesifik hataları yakalamak için birden fazla catch blogu kullanabilirsiniz. try catch bloguna ek olarak kullanabileceğiniz birde finally blogu vardır. finally kullanmak zorunda değilsiniz ama bazen her durumda çalışması gereken kodlar olacaktır. Örneğin sqle bağlanıp birşeyler yapıyorsanız vs olası bir hata durumunda sql connection kapatmanız güvenlik açısından doğru olacaktır. Bu durumda sql connection kapatma işi finally kod blogunda yapılır. throw ise oluşan hataları kendi oluşturduğumuz custom exception ile yakalamak istediğimizde hata fırlatmak için kullanılır.

try catch blogu kullanımı

try
{
// Kodlar bu kısma yazılır
}
catch(Exception ex)
{
throw ex;
}

try catch finally blogu kullanımı
C#
try
{
// Kodlar bu kısma yazılır
}
catch(Exception ex)
{
throw ex;
}
finally
{

}
C#
 
Programlama da oluşan hataları 2’ye ayırıyoruz:
  1. a-)CheckedException (Compiletime Exception)
    • SQLException
    • IOException
      • Dosya ile ilgili işlem yapılırken oluşan hatalardır. Dosya bulunamadığında, dosya okuma yapacakken dosyayı açamadığında bu hata oluşur.
        static void Main()
        {
        try
        {
        File.Open("C:\\deneme.txt", FileMode.Open);
        }
        catch (IOException ex)
        {
        throw ex;
        }
        }
        C#
    • TargetInvocationException
      • Reflection yoluyla çağrılan metodlar tarafından fırlatılan hatalardır.
  2. b-)UncheckedException (Runtime Exception)
    • NullReferenceException
      • Erişilmek istenen değişkenin veya nesnenin özelliği null ise bu hata oluşur.
    • IndexOutOfRangeException
      • Erişilmek istenen index dizi boyutunun dışında ise bu hata oluşur.
        static void Main(string[] args)
        {
        int [] dizi = {1,2,3,4,5};
        int altinciEleman = dizi[5];
        }
        C#

        yerine

        static void Main(string[] args)
        {
        try
        {
        int [] dizi = {1,2,3,4,5};
        int altinciEleman = dizi[5];
        }
        catch (IndexOutOfRangeException ex)
        {
        throw ex;
        }
        }
        C#
    • ArgumentException
      • Bir metod bilinmeyen argümanlarla çağrıldığında bu hata oluşur.
      • static void Main()
        {
        try
        {
        Test(null);
        }
        catch (Exception ex)
        {
        Console.WriteLine(ex);
        }
        }
        
        static int Test(string argument)
        {
        // argument null ise
        if (argument == null)
        {
        throw new ArgumentNullException("argument");
        }
        return argument.Length;
        }
        C#
    • DivideByZeroException
      • Bir sayının 0’a bölünmesi durumunda oluşur.
        static void Main(string[] args)
        {
        int num1 = 5;
        int num2 = 0;
        int result = num1 / num2;
        }

        yerine

        static void Main(string[] args)
        {
        try
        {
        int num1 = 5;
        int num2 = 0;
        int result = num1 / num2;
        }
        catch (DivideByZeroException ex)
        {
        throw ex;
        }
        }