Xử lý ngoại lệ trong C# (Bài 9)
Xử lý ngoại lệ trong c# là xử lý cho một vấn đề phát sinh trong quá trình thực hiện chương trình, như vấn đề phát sinh khi đọc một file không tồn tại, ….
Xử lý ngoại lệ trong C# được xây dựng trên bốn từ khoá try, catch, finally và throw.
Xử lý ngoại lệ trong c# – Cú pháp
try
{
// Câu lệnh có thể phát sinh lỗi thực thi
}
catch(Exception_Class object)
{
// Xử lý ngoại lệ
}
finally
{
// cleanup
}
Bảng bên dưới mô tả một số Exception class thường gặp
Exception class | Mô tả |
IOException | Xử lý các lỗi nhập xuất file |
IndexOutOfRangeException | Xử lý các lỗi phát sinh khi truy cập vượt chỉ số mảng |
NullReferenceException | Xử lý các lỗi phát sinh khi sử dụng một object chưa được tạo |
InvalidCastException | Xử lý lỗi phát sinh khi chuyển đổi sai kiểu dữ liệu |
Exception | Ngoại lệ tổng quát |
Xử lý ngoại lệ trong c# – Ví dụ
Ví dụ sau được sử dụng try…catch để xử lý lỗi phát sinh khi người dùng nhập sai kiểu dữ liệu cho biến kiểu số.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication.lesson08
{
class Numbers
{
static void Main(string[] args)
{
int n = 0;
bool isError;
do
{
isError = false;
try
{
Console.Write("Enter your number ");
n = Convert.ToInt32(Console.ReadLine());
}
catch (Exception e)
{
Console.WriteLine("Invalid number. Please try again!");
isError = true;
}
} while (isError);
Console.Write("Your number is {0}", n);
Console.ReadLine();
}
}
}
Xử lý ngoại lệ trong c# – Ngoại lệ tự định nghĩa
Lập trình viên có thể tự định nghĩa một ngoại lệ cho chính mình thay vì sử dụng những ngoại lệ có sẵn bằng cách kế thừa lớp Exception. Bên dưới là một ví vụ giải thích cách tạo một ngoại lệ.
Bước 1: Tạo một lớp exception
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication.lesson08
{
class MyException:Exception
{
public MyException(string msg): base(msg)
{
}
}
}
Bước 2: Sử dụng exception tự định nghĩa
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication.lesson08
{
class Scores
{
public static void showScore(float avg)
{
if (avg < 0)
{
throw (new MyException("Average score must be greater than 0"));
}
else
{
Console.WriteLine("Average score: {0}", avg);
}
}
static void Main(string[] args)
{
try
{
// Ok
showScore(7.8F);
// Exception
showScore(-10.0F);
}
catch (MyException me)
{
Console.Write("{0}", me.Message);
}
Console.ReadLine();
}
}
}
Kết quả khi chạy chương trình
Xử lý ngoại lệ trong c# – Bài tập thực hành
Câu 1: Tạo namespace tên Library và BorrowBook
Câu 2: Tạo lớp Student thuộc Library. Lớp Student có các thuộc tính như sau: studentID, studentName, age, gender và city có phạm vi truy cập là private. Trong lớp này có các phương thức sau:
Phương thức nhập chi tiết các thông tin cho Student. Trong phương thức này kiểm tra giá trị nhập vào như sau:
- studentID
- studentName phải có độ dài từ 6-40 ký tự
- age>=18 (chỉ được phép nhập số)
- gender kiểu string và chỉ nhận 1 trong 2 giá trị Nam hoặc Nữ. Ngoài 2 giá trị trên, bắt người dùng phải nhập lại.
- city phải có độ dài từ 4-40 ký tự
Phương thức hiển thị thông tin của Student.
Câu 3: Xây dưng lớp Book thuộc BorrowBook có các thuộc tính như số lượng sách mượn, loại sách cần mượn, phần trăm theo ngày mượn và số lượng ngày mượn.
Phương thức AcceptDetails nhập chi tiết các thông tin cho Book. Kiểm tra các giá trị nhập vào số lượng sách > 0, số ngày mượn >0 và <31 (chỉ được nhập số).
Loại sách mượn và rate nhập theo menu như sau
Phương thức CalculateAmount() theo công thức
Số lượng * (rate / 100) * số ngày mượn * 10
Phương thức DisplayDetails() hiển thị chi tiết
Câu 4: Xây dựng lớp thực thi để thực hiện các chức năng trên