Menu
CoddyTech

Ngoại lệ tùy chỉnh

Thuộc phần Logic và luồng chương trình trong hành trình C# của Coddy. Bài học 29 trên 66.

Ngoại lệ tùy chỉnh cho phép bạn tạo các kiểu ngoại lệ riêng cho những tình huống lỗi đặc thù của ứng dụng.

Để tạo ngoại lệ tùy chỉnh, hãy định nghĩa một lớp kế thừa từ Exception. Kế thừa nghĩa là lớp mới của bạn tự động có tất cả hành vi của lớp cha, trong trường hợp này là Exception, đồng thời cho phép bạn thêm hoặc tùy chỉnh chức năng. Cú pháp class MyException : Exception có nghĩa là MyException mở rộng Exception.

public class InvalidAgeException : Exception
{
    public InvalidAgeException() : base("Age is not valid.")
    {
    }
    
    public InvalidAgeException(string message) : base(message)
    {
    }
}

: Exception: kế thừa từ lớp Exception tích hợp sẵn.
: base(...): gọi hàm khởi tạo của lớp cha Exception để đặt thông báo lỗi.
Hàm khởi tạo đầu tiên cung cấp thông báo mặc định khi không có thông báo nào được truyền vào.
Hàm khởi tạo thứ hai nhận một thông báo tùy chỉnh để bên gọi có thể mô tả lỗi chi tiết.

Bây giờ bạn có thể phát sinh ngoại lệ tùy chỉnh khi cần:

int age = -5;
if (age < 0)
{
    throw new InvalidAgeException("Age cannot be negative.");
}

Khi chạy đoạn code này với tuổi âm, chương trình sẽ ném ngoại lệ tùy chỉnh của bạn cùng thông báo "Age cannot be negative."

Lưu ý: Trong các bài tập của bài học này, các hàm xác thực trả về true khi đầu vào hợp lệ và ném ngoại lệ tùy chỉnh khi đầu vào không hợp lệ. Vì ngoại lệ chưa được xử lý sẽ dừng chương trình ngay lập tức, các test case chỉ cần kiểm tra đường đi trả về true: bản thân ngoại lệ là kết quả có thể quan sát được khi đầu vào không hợp lệ.

challenge icon

Thử thách

Trung bình

Tạo một lớp ngoại lệ tùy chỉnh có tên InvalidTemperatureException kế thừa từ Exception. Lớp này cần có:

  1. Hàm khởi tạo mặc định đặt thông báo là "Temperature is not valid."
  2. Một hàm khởi tạo nhận thông báo tùy chỉnh.

Sau đó, triển khai phương thức có tên checkTemperature để:

  • Nhận một tham số số nguyên biểu thị nhiệt độ theo độ Celsius
  • Ném một InvalidTemperatureException kèm thông báo "Temperature below absolute zero!" nếu nhiệt độ nhỏ hơn -273
  • Trả về true nếu nhiệt độ hợp lệ

Tự làm thử

using System;

class CheckTemperature
{
    // Tạo lớp ngoại lệ tùy chỉnh tại đây
    
    public static bool checkTemperature(int celsius)
    {
        // Viết code tại đây
    }
    
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch C# online