try-finally (C# Başvurusu)

Bir bloğu kullanarak, bir deneme bloğunda ayrılan tüm kaynakları temizabilir ve blokta bir özel durum olsa bile finally kod try çalıştırabilirsiniz. Genellikle, denetim deyiminden finally ayrıldığında bir bloğun deyimleri try çalıştır. Denetimin aktarımı, normal yürütmenin, bir , , veya deyiminin yürütülmesinin veya deyiminden bir özel durumun break continue goto return yayılmasının sonucu try olarak oluşabilir.

Bir işlenmiş özel durum içinde, finally ilişkili bloğun çalıştırılama garantisi vardır. Ancak, özel durum işlendiğinde bloğun yürütülmesi, özel finally durum izlemenin nasıl tetiklendiğinden bağlıdır. Bu da bilgisayarınızın nasıl ayara bağlı olduğuyla ilgilidir. Yan tümcelerin finally çalışmay olduğu tek durumlar, hemen durdurulan bir programın olmasıdır. BUNUN bir örneği, IL deyimlerinin bozuk olması nedeniyle ne InvalidProgramException zaman atılan olabilir. Çoğu işletim sisteminde makul kaynak temizleme işlemi, işlemi durdurma ve kaldırma işleminin bir parçası olarak uzuyor.

Genellikle, işlenmiş olmayan bir özel durum bir uygulamayı sona erdiğinde, finally bloğun çalıştırıp çalıştırılamama durumu önemli değildir. Ancak, bu durumda bile çalışması gereken bir blokta deyimleri finally varsa, çözümlerden biri deyimine catch bir blok try - finally eklemektir. Alternatif olarak, çağrı yığınının yukarılarında bir deyimin try bloğunda try - finally atılmış olan özel durumu yakalayabilirsiniz. Yani, deyimini içeren yöntemi çağıran yönteminde veya bu yöntemi çağıran yöntemde ya da çağrı yığınında herhangi bir yöntemde özel durumu try - finally yakalayabilirsiniz. Özel durum yakalanmazsa, bloğun yürütülmesi işletim sisteminin bir özel durum izleme işlemi tetiklemeyi finally seçip seçmey durumuna bağlıdır.

Örnek

Aşağıdaki örnekte, geçersiz bir dönüştürme deyimi bir özel duruma neden System.InvalidCastException olur. Özel durum iş değil.

public class ThrowTestA
{
    public 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, yöntemden bir özel TryCast durum çağrı yığınının daha uzak bir yönteminde yakalanır.

public class ThrowTestB
{
    public 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;
        }
    }

    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 daha fazla bilgi finally için bkz. try-catch-finally.

C# ayrıca kullanışlı bir söz dizimsindenesneler için benzer işlevler sağlayan IDisposable using deyimini içerir.

C# dili belirtimi

Daha fazla bilgi için C# dil belirtimlerinin try deyimi bölümüne bakın.

Ayrıca bkz.