2. Bắt và xử lý ngoại lệ 1 Câu lệnh try…catch
2.2. Ném ngoại lệ với câu lệnh throw
Để phát tín hiệu một sự không bình thường trong một lớp của ngôn ngữ C#, chúng ta phát sinh một ngoại lệ. Để làm được điều này, chúng ta sử dụng câu lệnh ném ngoại lệ throw. Dòng lệnh sau tạo ra một đối tượng mới của lớp ngoại lệ System.Exception và sau đó
throw đối tượng đó để phát ra tín hiệu phát sinh ngoại lệ. Từ tín hiệu đó, chương trình bao bên ngoài có thể bắt và xử lý ngoại lệ này.
throw <đối tượng ngoại lệ>;
Trong đó, <đối tượng ngoại lệ> là tên đối tượng ngoại lệ cần ném ra để phương thức bên ngoài xử lý. Có thể tạo ra một đối tượng ngoại lệ mới và ném ra với cú pháp
throw new System.Exception();
Khi câu lện throw được thực hiện thì ngoại lệ được phát sinh, làm ngưng việc thực thi chương trình và tìm kiếm một trình xử lý ngoại lệ. Nếu trình xử lý ngoại lệ không được tìm thấy trong phương thức hiện thời thì sẽ tìm kiếm trong phương thức gọi phương thức hiện thời cho tới khi tìm kiếm trong phương thức ngoài cùng nhất là phương thức Main(). Nếu vẫn không tìm thấy trình xử lý ngoại lệ thì chương trình sẽ kết thúc bất thường. Vậy câu lệnh
throw có thể được sử dụng để ném ra ngoại lệ cho trình xử lý ngoại lệ của phương thức gọi phương thức chứa lệnh throw này xử lý
Ví dụ (V.5) Ném ngoại lệ với câu lệnh throw
Bước 1: Thêm một dự án dòng lệnh mới có tên „ThrowDemo‟ vào solution Session_V Bước 2: Chèn mã lệnh vào lớp Program.cs như bên dưới
class Program {
static void Main() { // Phương thức xử lý ngoại lệ try { A(); }
catch (Exception ex) {
Console.WriteLine(ex.Message); }
Console.ReadLine(); }
static void A() {
// Phương thức ném ra ngoại lệ chia cho không try
{
int value = 1 / int.Parse("0"); } catch(DivideByZeroException ex { throw ex; } } }
Bước 3: Thiết lập dự án mặc định bằng cách click chuột phải vào „ThrowDemo‟ chọn Set as Startup project
Bước 4: Dịch và chạy chương trình
Hình (V.5)Màn hình hiển thị thông báo lỗi
Trong Ví dụ (V.5) phương thức A() gặp lỗi chia cho không và ném ra ngoại lệ chia cho không thông qua lệnh throw. Phương thức này được gọi trong phương thức Main() và trong phương thức Main() có khối try…catch để bắt và hiển thị thông báo về ngoại lệ được ném ra từ trong phương thức A()