2010-10-17 49 views
5

tôi muốn biết cuối cùng khối vẫn thực thi trong xử lý ngoại lệ ngay cả khi không có khối catch phù hợp cho khối thử và nếu không thì điều gì sẽ xảy ra? Ngoài ra, tôi cũng muốn ngoại lệ hệ thống và sự khác biệt của ứng dụngxử lý ngoại lệ trong C#

Trả lời

13

Có, bạn không cần một khối catch chút nào. Khối finally luôn thực hiện.

Do sự khác biệt giữa System.ExceptionSystem.ApplicationException: Exception là lớp cơ sở cho tất cả các ngoại lệ; ApplicationException nên được sử dụng khi xảy ra lỗi ứng dụng không gây tử vong. Xem MSDN documentation.

Cũng xem best practices for handling exceptions.

+0

bạn có nghĩa là sau khi chạy cuối cùng khối ngoại lệ sẽ được ném và chương trình sẽ chấm dứt? (khi không có khối catch phù hợp) – NoviceToDotNet

+0

Vâng, có và không. Ngoại lệ sẽ được ném, nhưng có thể có một khối try-catch khác xung quanh cuộc gọi đến cái này, trong trường hợp này mức độ cao hơn try-catch sẽ bắt ngoại lệ này. –

+2

Ngoài ra, không sử dụng 'ApplicationException'. Nó không được chấp nhận. Sử dụng một ngoại lệ thích hợp có nguồn gốc từ System.Exception (hoặc lấy được của riêng bạn) để thay thế. – mtreit

4

Khi những người khác được đề cập finally sẽ chạy ngay cả khi không có khối catch. Điều này hỗ trợ Java thử cuối cùng mẫu (có thể đạt được bằng cách sử dụng IDisposableusing).

Một ngoại lệ (xem những gì tôi đã có?) là khi một StackOverflowException được ném trong trường hợp này finally khối will not run (và cũng không sẽ là một catch nếu đã có mặt).

Khối finally chạy sau khi khối try hoàn thành (sạch hoặc bằng cách ném ngoại lệ) như bạn mong đợi từ vị trí của mã trong mã.

+0

+1 để đề cập đến mảnh ngăn xếp StackOverflowException –

+0

P.S. Tôi thích cách 2 người Israel trả lời câu hỏi này cả hai đều mang một đứa trẻ trong một chiếc ba lô. (Bạn không thể thấy điều đó tốt như vậy trong pic của tôi, nhưng đó là những gì nó là ...);) –

+0

những gì xảy ra nó ngoại lệ phát sinh trong khối catch ... vẫn cuối cùng sẽ thực hiện? – NoviceToDotNet