Khối cuối cùng sẽ luôn được thực thi.Từ MSDN:
Khối cuối cùng hữu ích để dọn sạch mọi tài nguyên được phân bổ trong khối thử cũng như chạy bất kỳ mã nào phải thực thi ngay cả khi có ngoại lệ. Kiểm soát luôn được chuyển đến khối cuối cùng bất kể khối try out thoát ra như thế nào.
Trong khi bắt được sử dụng để xử lý các ngoại lệ xảy ra trong khối lệnh, cuối cùng được sử dụng để đảm bảo khối mã lệnh thực hiện bất kể khối thử trước đó bị thoát ra sao.
Bằng cách này, đây là loại câu hỏi mà bạn có thể dễ dàng kiểm tra bản thân bằng cách viết một số mã, biên dịch và xem điều gì xảy ra khi bạn thực thi nó.
class Program {
static void Main(string[] args) {
try {
Console.WriteLine("Trying!");
throw new Exception();
}
catch (Exception e) {
Console.WriteLine("Catching {0}!", e.Message);
throw new Exception();
}
finally {
Console.WriteLine("Finally!");
}
}
}
đầu ra này:
Trying!
Catching Exception of type 'System.Exception' was thrown.!
Unhandled Exception: System.Exception: Exception of type 'System.Exception' was
thrown.
at TestFinally.Program.Main(String[] args) in C:\Documents and Settings\Me\My
Documents\Visual Studio 2008\Projects\TestFinally\TestFinally\Program.cs:line 15
Finally!
Press any key to continue . . .
Tôi cho rằng ngoại lệ tràn ngăn chặn thực sự cũng có thể ngăn không cho chạy cuối cùng. Tôi không thể tìm thấy tài liệu cho bàn tay này mặc dù. – JaredPar
@Jared: Vâng, tôi nghĩ bạn hoàn toàn đúng. OutOfMemoryException là tốt? Không chắc chắn về điều đó. Sẽ cố gắng tái sản xuất. –
Nhưng liệu StackOverflowException có chấm dứt toàn bộ quá trình không? Nếu vậy, nó đến dưới kiểm tra đầu tiên của tôi. –