try-finally (C# Başvurusu)try-finally (C# Reference)

Bir finally blok kullanarak, bir TRY bloğunda ayrılan tüm kaynakları temizleyebilir ve bir try özel durum bloğunda meydana gelirse bile kodu çalıştırabilirsiniz.By using a finally block, you can clean up any resources that are allocated in a try block, and you can run code even if an exception occurs in the try block. Genellikle, denetim bir finally try deyiminden ayrıldığında blok deyimleri çalışır.Typically, the statements of a finally block run when control leaves a try statement. Denetimin aktarımı normal yürütme,, break, veya continue goto return bildiriminin yürütülmesi ya da deyimdenbirözeldurumunyayılmasındankaynaklanıyorolabilir.tryThe transfer of control can occur as a result of normal execution, of execution of a break, continue, goto, or return statement, or of propagation of an exception out of the try statement.

İşlenmiş bir özel durum içinde, ilişkili finally bloğun çalıştırılması garanti edilir.Within a handled exception, the associated finally block is guaranteed to be run. Ancak, özel durum işlenmemiş ise, finally bloğun yürütülmesi özel durum geriye doğru tetikleme işleminin tetiklendiği duruma bağlıdır.However, if the exception is unhandled, execution of the finally block is dependent on how the exception unwind operation is triggered. Bu da, bilgisayarınızın nasıl ayarlanmayacağına bağlıdır.That, in turn, is dependent on how your computer is set up.

Genellikle, işlenmeyen bir özel durum uygulamayı sona erdirdiğinde, finally bloğun çalıştırılıp çalıştırılmayacağı önemli değildir.Usually, when an unhandled exception ends an application, whether or not the finally block is run is not important. Ancak, bu durumda bile çalıştırılması gereken bir finally blokta deyimler varsa, bir çözüm finally ifadeye bir catch blok try - eklemektir.However, if you have statements in a finally block that must be run even in that situation, one solution is to add a catch block to the try-finally statement. Alternatif olarak, çağrı yığınının try üst kısmında yer alan bir try - finally deyimin bloğunda ortaya atılmış olabilecek özel durumu yakalayabilirsiniz.Alternatively, you can catch the exception that might be thrown in the try block of a try-finally statement higher up the call stack. Diğer bir deyişle, bir yöntemi, try finally ifadeyi içeren - yöntemi veya bu yöntemi çağıran yöntemi ya da çağrı yığınında herhangi bir yöntemi çağıran yöntemini yakalayabilirsiniz.That is, you can catch the exception in the method that calls the method that contains the try-finally statement, or in the method that calls that method, or in any method in the call stack. Özel durum yakalanmadığında, finally bloğun yürütülmesi işletim sisteminin özel durum geriye doğru izleme işlemi tetiklemeyi seçip seçmediğine bağlıdır.If the exception is not caught, execution of the finally block depends on whether the operating system chooses to trigger an exception unwind operation.

ÖrnekExample

Aşağıdaki örnekte, geçersiz bir dönüştürme açıklaması System.InvalidCastException özel duruma neden olur.In the following example, an invalid conversion statement causes a System.InvalidCastException exception. Özel durum işlenmemiş olur.The exception is unhandled.

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, TryCast yöntem içindeki bir özel durum, çağrı yığınının ardından bir yöntemde yakalanır.In the following example, an exception from the TryCast method is caught in a method farther up the call stack.

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.
}

Hakkında finallydaha fazla bilgi için bkz. try-catch-finally.For more information about finally, see try-catch-finally.

C#Ayrıca, uygun bir sözdiziminde nesneler için IDisposable benzer işlevler sağlayan using ifadesinide içerir.C# also contains the using statement, which provides similar functionality for IDisposable objects in a convenient syntax.

C# dili belirtimiC# language specification

Daha fazla bilgi için, C# dil belirtiminin TRY deyimin bölümüne bakın.For more information, see The try statement section of the C# language specification.

Ayrıca bkz.See also