Tham khảo tài liệu 'giáo trình hình thành phân tích điều khiển testfunc khi thực hiện chia với zero p2', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả | Lớp MyCustomException được dẫn xuất từ và lớp này không có thực thi hay khai báo gì ngoài một hàm khởi dựng. Hàm khởi dựng này lấy tham số là một chuỗi và truyền cho lớp cơ sở. Trong trường hợp này lợi ích của việc tạo ra ngoại lệ là làm nổi bật điều mà chuơng trình muốn minh họa tức là không cho phép số chia là zero. Sử dụng ngoại lệ ArithmeticException thì tốt hơn là ngoại lệ chúng ta tạo ra. Nhưng nó có thể làm nhầm lẫn cho những người lập trình khác vì phép chia với số chia là zero không phải là lỗi số học. Phát sinh lại ngoại lệ Giả sử chúng ta muốn khối catch thực hiện một vài hành động đúng nào đó rồi sau đó phát sinh lại ngoại lệ ra bên ngoài khối catch trong một hàm gọi . Chúng ta được phép phát sinh lại cùng một ngoại lệ hay phát sinh lại các ngoại lệ khác. Nếu phát sinh ra ngoại lệ khác chúng ta có thể phải nhúng ngoại lệ ban đầu vào bên trong ngoại lệ mới để phương thức gọi có thể hiểu được lai lịch và nguồn gốc của ngoại lệ. Thuộc tính InnerException của ngoại lệ mới cho phép truy cập ngoại lệ ban đầu. Bởi vì InnerException cũng là một ngoại lệ nên nó cũng có một ngoại lệ bên trong. Do vậy toàn bộ dây chuyền ngoại lệ là một sự đóng tổ nest của một ngoại lệ này với một ngoại lệ khác. Giống như là con lật đật mỗi con chứa trong một con và đến lượt con bên trong lại chứa. 5 Ví dụ Phát sinh lại ngoại lệ ngoại lệ inner. namespace Programming_CSharp using System tạo ngoại lệ riêng public class MyCustomException public MyCustomException string message Exception inner base message inner public class Test public static void Main Test t new Test 382 chia hai số và xử lý ngoại lệ public void TestFunc try DangerousFunc1 catch MyCustomException e n 0 Retrieving exception history. Exception inner while inner null 0 inner public void DangerousFunc1 try DangerousFunc2 catch e .