Sau khi đi qua hầu hết các câu trả lời ở đây, tôi muốn thêm một vài suy nghĩ.
Dựa vào tài liệu XML Nhận xét và mong đợi người khác dựa vào là lựa chọn không tốt. Hầu hết mã C# mà tôi đã gặp không phải là phương pháp tài liệu hoàn toàn và nhất quán với các chú thích tài liệu XML. Và sau đó có vấn đề lớn hơn mà không có ngoại lệ được kiểm tra trong C#, làm thế nào bạn có thể ghi lại tất cả các ngoại lệ mà phương thức của bạn ném cho mục đích người dùng API của bạn biết cách xử lý tất cả các cá nhân? Hãy nhớ rằng, bạn chỉ biết về những người bạn tự ném mình với từ khóa ném trong việc triển khai của bạn. Các API bạn đang sử dụng bên trong triển khai phương pháp của mình cũng có thể ném ngoại lệ mà bạn không biết vì chúng có thể không được ghi lại và bạn không xử lý chúng trong quá trình triển khai của mình, vì vậy chúng sẽ xuất hiện khi người gọi phương pháp. Nói cách khác, các chú thích tài liệu XML này không thay thế cho các ngoại lệ đã kiểm tra.
Andreas đã liên kết cuộc phỏng vấn với Anders Hejlsberg trong câu trả lời ở đây về lý do tại sao nhóm thiết kế C# quyết định chống lại ngoại lệ đã kiểm tra. Câu trả lời cuối cùng cho câu hỏi ban đầu được ẩn trong cuộc phỏng vấn rằng:
các lập trình viên bảo vệ mã của họ bằng cách viết thử cuối cùng là ở khắp mọi nơi, vì vậy họ sẽ trở lại một cách chính xác nếu một ngoại lệ xảy ra, nhưng họ không thực sự quan tâm đến việc xử lý các ngoại lệ.
Nói cách khác, không ai nên quan tâm đến loại ngoại lệ nào có thể được mong đợi đối với một API cụ thể vì bạn luôn bắt tất cả chúng ở mọi nơi. Và nếu bạn thực sự quan tâm đến các trường hợp ngoại lệ cụ thể, cách xử lý chúng tùy thuộc vào bạn và không phải ai đó xác định chữ ký phương thức với một cái gì đó như Java ném từ khóa, buộc xử lý ngoại lệ cụ thể trên người dùng API.
-
Cá nhân, tôi bị rách tại đây. Tôi đồng ý với Anders rằng việc kiểm tra ngoại lệ không giải quyết được vấn đề mà không cần thêm các vấn đề mới, khác biệt. Cũng giống như với các bình luận tài liệu XML, tôi hiếm khi thấy mã C# với mọi thứ được gói trong khối thử cuối cùng. Nó cảm thấy với tôi mặc dù điều này thực sự là lựa chọn duy nhất của bạn và một cái gì đó mà có vẻ như một thực hành tốt.
@Louis RH - Tôi hiểu. Không có C# (hoặc .NET) tương đương. – Oded
"nó sẽ bong bóng lên", điều này có nghĩa rằng điều này là tương đương với tất cả các phương pháp có một khoản ném trong Java? –
@Louis RH - loại. Nó có nghĩa là một ngoại lệ, nếu không được xử lý, sẽ đi lên chuỗi cuộc gọi thông qua mỗi chức năng gọi điện thoại cho đến khi xử lý. – Oded