Tạo riêng các ngoại lệ trong csharp

c-sharp

(Phạm Quyết Nghị) #1

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ụ 13.7 sau minh họa việc tạo một ngoại lệ riêng.

Ví dụ: Tạo một ngoại lệ riêng.

namespace Programming_CSharp
{
	using System;
	// tạo ngoại lệ riêng
	public class MyCustomException : System.ApplicationException
	{
		public MyCustomException( string message): base(message)
		{
		}
	}
	
	public class Test
	{
		public static void Main()
		{
			Test t = new Test();
			t.TestFunc();
		}
		
		// chia hai số và xử lý ngoại lệ
		public void TestFunc()
		{
			try
			{
				Console.WriteLine(“Open file here”);
				double a = 0;
				double b = 5;
				Console.WriteLine(“{0} /{1} = {2}”, a, b, DoDivide(a,b));
				Console.WriteLine(“This line may or not print”);
			}
				catch (System.DivideByZeroException e)
			{
				Console.WriteLine(“\nDivideByZeroException! Msg: {0}”, e.Message);
				Console.WriteLine(“\nHelpLink: {0}”, e.HelpLink);
			}
			catch (MyCustomException e)
			{
				Console.WriteLine(“\nMyCustomException! Msg: {0}”, e.Message);
				Console.WriteLine(“\nHelpLink: {0}”, e.HelpLink);
			}
			catch
			{
				Console.WriteLine(“Unknown excepiton caught”);
			}
			finally
			{
				Console.WriteLine(“Close file here.”);
			}
		}
			
		// thực hiện phép chia hợp lệ
		public double DoDivide( double a, double b)
		{
			if ( b == 0)
			{
				DivideByZeroException e = new DivideByZeroException();
				e.HelpLink = “https://meotinhoc.vn/”;
				throw e;
			}
			
			if ( a == 0)
			{
				MyCustomException e = new MyCustomException(“Can’t have zero
				divisor”);
				e.HelpLink = “https://meotinhoc.vn/”;
				throw e;
			}
			
			return a/b;
		}
	}
}

Lớp MyCustomException được dẫn xuất từ System.ApplicationException 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.


Tài liệu c# tiếng việt cho người mới bắt đầu (newbie)

89% Thành viên có cách giải cho một câu hỏi. Bạn thì sao?