Aracılığıyla paylaş


try-finally (C# Başvurusu)

Bir finally bloğu kullandığınızda; bir try bloğunda ayrılmış tüm kaynakları temizleyebilir ve try bloğunda bir özel durum meydana gelse bile, kodu çalıştırabilirsiniz.Genelde bir finally blokunun deyimleri bir denetim try deyimden ayrıldığında çalışır.Aktarım denetimi normal yürütmenin, bir break, continue, goto veya return ifadesini yürütmenin ya da try ifadesinden bir özel durumun yayılmasının sonucu olarak gerçekleşebilir.

İşlenen özel durum içinde ilgili finally blokun çalışması garantidir.Ancak özel durum işlenmezse finally bloğunun yürütülmesi özel durumun geriye doğru izlenme işleminin nasıl tetiklendiğine bağlıdır.Bu, bilgisayarınızın nasıl ayarlandığına bağlıdır.Daha fazla bilgi için bkz. CLR'de İşlenmeyen Özel Durum İşleme.

Genelde işlenmeyen bir özel durum uygulamayı sonlandırdığında finally blokunun çalıştırılıp çalıştırılmaması önemli değildir.Ancak, finally bloğunda bu durumda bile çalıştırılması gereken ifadeleriniz varsa çözümlerden birinin catch bloğunu try-finally ifadesine eklemesi gerekir.Alternatif olarak, çağrı yığınının üstlerinde bulunan bir try-finally deyiminin try bloğunda oluşturulmuş olabilecek istisnayı yakalamak mümkündür.Diğer bir deyişle, try-finally deyimini içeren yöntemi çağıran yöntemdeki veya bu yöntemi çağıran yöntemdeki veya çağrı yığınındaki herhangi bir yöntemdeki özel durumu yakalayabilirsiniz.Özel durum yakalanmazsa finally bloğunun yürütülmesi işletim sisteminin özel durumu geriye doğru izleme işlemini tetikleyip tetiklememeyi seçmesine bağlıdır.

Örnek

Aşağıdaki örnekte, geçersiz dönüştürme deyimi bir System.InvalidCastException özel durumuna neden oluyor.Özel durum işlenmedi.

public class ThrowTestA
{
    static void Main()
    {
        int i = 123;
        string s = "Some string";
        object obj = s;

        try
        {
            // Invalid conversion; obj contains a string, not a numeric type.
            i = (int)obj;

            // The following statement is not run.
            Console.WriteLine("WriteLine at the end of the try block.");
        }
        finally
        {
            // To run the program in Visual Studio, type CTRL+F5. Then  
            // click Cancel in the error dialog.
            Console.WriteLine("\nExecution of the finally block after an unhandled\n" +
                "error depends on how the exception unwind operation is triggered.");
            Console.WriteLine("i = {0}", i);
        }
    }
    // Output: 
    // Unhandled Exception: System.InvalidCastException: Specified cast is not valid. 
    // 
    // Execution of the finally block after an unhandled 
    // error depends on how the exception unwind operation is triggered. 
    // i = 123
}

Aşağıdaki örnekte, çağrı yığınından uzakta olan bir yöntemde TryCast yöntemine ilişkin bir özel durum yakalandı.

public class ThrowTestB
{
    static void Main()
    {
        try
        {
            // TryCast produces an unhandled exception.
            TryCast();
        }
        catch (Exception ex)
        {
            // Catch the exception that is unhandled in TryCast.
            Console.WriteLine
                ("Catching the {0} exception triggers the finally block.",
                ex.GetType());

            // Restore the original unhandled exception. You might not 
            // know what exception to expect, or how to handle it, so pass  
            // it on. 
            throw;
        }
    }

    public static void TryCast()
    {
        int i = 123;
        string s = "Some string";
        object obj = s;

        try
        {
            // Invalid conversion; obj contains a string, not a numeric type.
            i = (int)obj;

            // The following statement is not run.
            Console.WriteLine("WriteLine at the end of the try block.");
        }
        finally
        {
            // Report that the finally block is run, and show that the value of 
            // i has not been changed.
            Console.WriteLine("\nIn the finally block in TryCast, i = {0}.\n", i);
        }
    }
    // Output: 
    // In the finally block in TryCast, i = 123. 

    // Catching the System.InvalidCastException exception triggers the finally block. 

    // Unhandled Exception: System.InvalidCastException: Specified cast is not valid.
}

finally hakkında daha fazla bilgi için bkz. try-catch-finally.

C# ayrıca; kullanışlı bir sözdizimindeki IDisposable nesneleri için benzer işlevsellik sağlayan 'using' deyimi'ni içerir.

C# Dil Belirtimi

Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.

Ayrıca bkz.

Görevler

Nasıl yapılır: Açıkça Özel Durumlar Oluşturma

Başvuru

C# Anahtar Sözcükleri

try, throw ve catch Deyimleri (C++)

Özel Durum İşleme Deyimleri (C# Başvurusu)

throw (C# Başvurusu)

try-catch (C# Başvurusu)

Kavramlar

C# Programlama Kılavuzu

Diğer Kaynaklar

C# Başvurusu