25.3.1 Ném lại những ngoại lệ
Khi có một ngoại lệ xảy ra chúng ta muốn phát sinh ngoại lệ ra bên ngoài khối cacth (trong một hàm gọi) thì khi đó chúng ta cần ném ngoại lệ ra ngoài khối catch, Cú pháp để thực hiện phát sinh lại cùng một ngoại lệ mà không có bất cứ bổ sung hay hiệu chỉnh nào là : throw bienNgoaiLe;
Ví dụ 5.4
class NgoaiLe {
public int Chia() {
int x, y,z=0; try
{
Console.Write("Nhap gia tri x: "); x = int.Parse(Console.ReadLine()); Console.Write("Nhap gia tri y: "); y = int.Parse(Console.ReadLine()); z = x / y;
catch (Exception ex) {
// Ném ngoại lệ ra ngoài khối cacth
Exception x = new Exception(ex.Message); throw x;
// Hoặc là
//throw new Exception(ex.Message); } return z; } } class chay {
static void Main() {
NgoaiLe f = new NgoaiLe(); try
{//Phương thức Chia() của lớp Ngoại lệ có thể phát sinh ngoại lệ do trong khi xây //dựng phương thức chúng ta đã ném ngoại lệ ra ngoài khối catch.
Console.WriteLine ( f.Chia()); }
catch (Exception ex)
{ Console.WriteLine(ex.Message); }
}
25.3.2 Tạo đối tượng ngoại lệ cho ứng dụng
CLR cung cấp những kiểu dữ liệu ngoại lệ cơ bản, trong ví dụ trước chúng ta đã tạo một vài các kiểu ngoại lệ riêng. Thông thường chúng ta cần thiết phải cung cấp các thông tin mở rộng cho khối catch khi một ngoại lệ được phát sinh. Tuy nhiên, có những lúc chúng ta muốn cung cấp nhiều thông tin mở rộng hay là các khả năng đặc biệt cần thiết trong ngoại lệ mà chúng ta tạo ra. Chúng ta dễ dàng tạo ra các ngoại lệ riêng, hay còn gọi là các ngoại lệ tùy chọn (custom exception), điều bắt buộc với các ngoại lệ này là chúng phải được dẫn xuất từ System.ApplicationException. Ví dụ 5.5 sau minh họa việc tạo một ngoại lệ riêng.
Ví dụ 5.5
class ClsNgoaile : System.ApplicationException {
public ClsNgoaile(string message) : base(message) { } } class HinhTront { public int x, y, r;
public HinhTront(int x, int y, int r) {
if (r < 0)
throw new ClsNgoaile("So Khong duoc am"); else this.x = x; this.y = y; this.r = r; } } class test {
static void Main() {
try {
HinhTront t = new HinhTront(4, 3, -4); } catch (ClsNgoaile ex)
{ Console.WriteLine(ex.Message); } Console.ReadLine(); } }