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
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.Exception
và System.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.
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 IDisposable
và using
).
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ã.
+1 để đề cập đến mảnh ngăn xếp StackOverflowException –
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à ...);) –
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
- 1. c + + xử lý ngoại lệ
- 2. Xử lý ngoại lệ C++
- 3. Xử lý ngoại lệ trong Obj-C
- 4. Xử lý ngoại lệ CPU trong C++
- 5. Xử lý ngoại lệ Python
- 6. Ném ngoại lệ trong bộ xử lý ngoại lệ
- 7. Xử lý ngoại lệ UserInterrupt trong Haskell
- 8. xử lý ngoại lệ ObjC trong monotouch
- 9. Xử lý ngoại lệ chưa xử lý trong .NET 1.1
- 10. Xử lý ngoại lệ MVVM
- 11. Enable Xử lý ngoại lệ an toàn trong C++ Builder
- 12. C#: Xử lý ngoại lệ trong cuộc gọi đệ quy
- 13. Xử lý các ngoại lệ C++ tùy chỉnh trong Cython
- 14. Xử lý ngoại lệ Floating-Point trong C++
- 15. Xử lý ngoại lệ TPL
- 16. Xử lý ngoại lệ JSF2
- 17. Xử lý ngoại lệ nút
- 18. Xử lý ngoại lệ AOP
- 19. XMLHttpRequest.open() xử lý ngoại lệ
- 20. Xử lý ngoại lệ WCF
- 21. Xử lý ngoại lệ CursorLoader
- 22. Xử lý ngoại lệ NHibernate
- 23. Xử lý nhiều ngoại lệ
- 24. Xử lý ngoại lệ PostgreSQL
- 25. Mẫu xử lý ngoại lệ
- 26. Ngoại lệ xử lý Antlr
- 27. Parallel.Invoke - ngoại lệ xử lý
- 28. BackgroundWorker xử lý ngoại lệ
- 29. ofstream xử lý ngoại lệ
- 30. xử lý ngoại lệ python
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
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. –
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