2010-10-04 28 views

Trả lời

11

Thực tế cũng giống như trong Java - bạn mở rộng lớp Exception.

Ở dạng cơ bản nhất.

public class CustomException : System.Exception 
{ 
    public CustomException() 
    { 
    } 

    public CustomException(string message) 
    : base(message) 
    { 
    } 

    public CustomException(string message, System.Exception innerException) 
    : base(message, innerException) 
    { 
    } 
} 

Để làm điều này, hãy thêm dữ liệu bạn muốn chụp bằng cách sử dụng trường hoặc thuộc tính.

Không quan tâm, trước khi trả lời câu hỏi này, tôi đã kiểm tra Thiết kế Microsoft Guildlines về Ngoại lệ tùy chỉnh. Designing Custom Exceptions (MSDN)

  1. Tránh phân cấp không gian tên sâu.
  2. Nếu có thể, lấy được từ một ngoại lệ cơ sở chung được cung cấp, nghĩa là, ArgumentException. HOWEVER Không lấy được từ ApplicationException. Nó không có hại, nó không phải là điểm khi làm như vậy. MSDN Blog Post on ApplicationException.
  3. Sử dụng hậu tố "Ngoại lệ".
  4. Đặt ngoại lệ theo thứ tự bằng cách triển khai giao diện ISerializable. Rõ ràng là một ngoại lệ phải được serializable để hoạt động chính xác trên miền ứng dụng và từ xa các ranh giới.
  5. Lưu thông tin bảo mật nhạy cảm trong trạng thái ngoại lệ riêng tư, thêm thuộc tính SecurityPermission để đảm bảo rằng chỉ có mã đáng tin cậy mới có thể nhận được thông tin.

I cao khuyên bạn nên đọc Design Guidelines trên MSDN.

16

Bạn muốn kế thừa từ System.Exception và ưu tiên cung cấp (tối thiểu) cùng một nhà thầu công khai và chuyển các tham số cho các nhà thầu cơ bản. Thêm các thuộc tính và/hoặc các phương pháp có liên quan mà bạn cho là phù hợp với nhu cầu cụ thể của bạn.

public class MyException : System.Exception 
{ 
    public MyException() : base() { } 
    public MyException(string message) : base(message) { } 
    public MyException(string message, Exception innerException) : base(message, innerException) { } 
} 
+0

Theo Nguyên tắc Thiết kế Khuôn khổ .NET, bạn có nghĩa vụ kế thừa trực tiếp từ Ngoại lệ trừ khi bạn có lý do thực sự tốt để chọn một thứ khác. –

+0

@ Jonathan: Tất cả các hệ thống trở lại bình thường. Đã xóa câu trả lời ngu ngốc của tôi và xóa nhận xét vô dụng của tôi. Upvoted câu trả lời trong tên của tinh thần SO. Cảm ơn bạn đã sửa. –

Các vấn đề liên quan