Nếu ném System.Exception
được coi là rất tệ, tại sao đầu tiên không Exception
được thực hiện abstract
?
Theo cách đó, sẽ không thể gọi:
throw new Exception("Error occurred.");
Điều này sẽ bắt buộc sử dụng các ngoại lệ xuất phát để cung cấp thêm chi tiết về lỗi xảy ra.
Ví dụ, khi tôi muốn cung cấp một hệ thống phân cấp ngoại lệ tùy chỉnh cho thư viện, tôi thường khai báo một lớp cơ sở trừu tượng cho các ngoại lệ của mình:
public abstract class CustomExceptionBase : Exception
{
/* some stuff here */
}
Và sau đó một số ngoại lệ xuất phát với mục đích cụ thể hơn:
public class DerivedCustomException : CustomExceptionBase
{
/* some more specific stuff here */
}
Sau đó, khi gọi bất kỳ phương thức thư viện nào, người ta có thể có khối try / Catch chung này để trực tiếp bắt bất kỳ lỗi nào đến từ thư viện:
try
{
/* library calls here */
}
catch (CustomExceptionBase ex)
{
/* exception handling */
}
Đây có phải là một thực hành tốt?
Nó sẽ tốt nếu Exception
được làm trừu tượng?
EDIT: Quan điểm của tôi ở đây là ngay cả khi một lớp ngoại lệ được đánh dấu abstract
, bạn vẫn có thể bắt nó trong một khối bắt tất cả. Làm cho nó trừu tượng chỉ là một cách để cấm các lập trình viên ném một ngoại lệ "siêu rộng". Thông thường, khi bạn tự nguyện ném một ngoại lệ, bạn nên biết nó là loại gì và tại sao nó lại xảy ra. Do đó, thi hành để ném một loại ngoại lệ cụ thể hơn.