Tình huốngu Những lỗi phát sinh khi rutime có thể làm hư hại chương trình u Có thể không phải lỗi lập trình file v Đĩa bị đầy v Lỗi phần cứng v File bị thay đổi thành chỉ đọc v Không thể
Trang 1Xử lý ngoại lệ
HD: ThS Nguyễn Hà Giang Khoa CNTT - Hutech
Trang 2Nội dung
u Cách xử lý ngoại lệ làm việc trong C#
u Câu lệnh try-catch-finally
Trang 3Tình huống
u Những lỗi phát sinh khi rutime có thể
làm hư hại chương trình
u Có thể không phải lỗi lập trình
file
v Đĩa bị đầy
v Lỗi phần cứng
v File bị thay đổi thành chỉ đọc
v Không thể truy cập, truy vấn CSDL
v …
Trang 4Cách xử lý trước đây
u Hầu hết các bước có khả năng thất bại
u Khó xác định chính xác lỗi từ những thông
tin trả về của hàm thư viện
u Đoạn code phải thực hiện rồi mới biết lỗi!
GET A FILENAME
OPEN THE FILE
IF THERE IS NO ERROR OPENING THE FILE
READ SOME DATA
IF THERE IS NO ERROR READING THE DATA
PROCESS THE DATA WRITE THE DATA
IF THERE IS NO ERROR WRITING THE DATA
CLOSE THE FILE
IF THERE IS NO ERROR CLOSING FILE
RETURN
Trang 5Cách xử lý Exception
u Đoạn code xử lý ngắn gọn, dễ đọc
u Logic chương trình hợp lý hơn, những đoạn nghi
ngờ có lỗi nằm trong vùng Try
u Cho phép xử lý tình huống lỗi rõ ràng và đơn giản!
TRY TO DO THESE THINGS:
GET A FILENAME OPEN THE FILE READ SOME DATA PROCESS THE DATA WRITE THE DATA CLOSE THE FILE RETURN
IF ERROR OPENING THE FILE THEN
IF ERROR READING THE DATA THEN
IF ERROR WRITING THE DATA THEN
IF ERROR CLOSING THE FILE THEN
Trang 6Các đối tượng Exception
u Trong C#, khi runtime error xuất hiện
v CLR sẽ xác định lỗi và phát sinh ta đối
tượng Exception
v Đối tượng Exception này được ném trở lại
stack chờ cho một phương thức bắt lỗi đó.
trình “catch” thì CRL sẽ in ra thông điệp lỗi
Trang 7Mô hình gọi – xử lý Exception
CLR Runtime
The Main( ) method
First Method
Exception Thrown Here
Method Calls Travel Down
Exceptions
Passed Up
Trang 8Sử dụng try-catch
u Dùng try-catch để xử lý ngoại lệ
v Đặt code có khả năng dẫn đến ngoại lệ
vào khối “try”
v Cung cấp các khối “catch” theo sau “try”
v Có thể cung cấp tất cả catch cho các lỗi
nếu muốn xử lý, bằng cách sử dụng các lớp exception thích hợp
v Nếu không cung cấp “catch” cho một
ngoại lệ, thì exception này được lan truyền lên trên.
Trang 9Cú pháp try-catch
try
{
RiskyBussiness();
}
catch (SomeException e )
{
// Handle code }
Code có khả năng dẫn đến lỗi
Tham số exception
được catch
Đoạn xử lý với tình
huống có lỗi
Trang 10Khối try
v Từ khóa try
v Theo sau khối “{…}”
v Khối “{…}” bắt buộc phải có, khác với
“{…}” trong if hay for
v Đặt bất cứ câu lệnh nào có khả năng phát
sinh ra ngoại lệ
Trang 11Khối catch
v Không có lệnh nào chen giữa hai khối
catch của một khối try
catch (Exception-class [var1]) {
// xử lý ngoại lệ 1 }
catch (Exception-class [var2]) {
// xử lý ngoại lệ 2 }
Trang 12Ví dụ try-catch
Chương trình bị terminate
Chương trình kết thúc
bình thường
Trang 13Sử dụng Finally
u Khi một exception được ném ra
v Luồng thực thi sẽ nhảy vào khối catch xử lý nó.
v Một số đoạn code giải phóng tài nguyên có thể bị
bỏ qua
v Khối try-catch có phần option là finally
v Luôn luôn được gọi
v Sử dụng để dọn dẹp các tài nguyên đang nắm
giữ
Open File
Read Data // ngoại lệ được phát sinh
Close File // đoạn code này bị bỏ qua, dù file chưa đóng
Trang 14VD có try-catch-finally
Luôn thực thi dù có hay không có ngoại lệ!
Trang 15Lệnh throw
v Cú pháp: throw exception-object
Phát sinh ra ngoại lệ
Trang 16Lớp Exception
u Có 2 loại ngoại lệ
v Ngoại lệ phát sinh bởi chương trình
v Ngoại lệ được tạo bởi CLR
tất cả lớp trong C#
u 2 lớp kế thừa từ lớp này:
v ApplicationException: thường làm lớp cơ
bản cho lớp ngoại lệ phát sinh từ ứng dụng
v SystemException: do CLR phát sinh
Trang 17Lớp Exception (2)
Một số lớp Exception thường dùng
v System.NullReferenceException
v Syste.InvalidCastException
v Syste.ArrayTypeMismatchException
v System.ArithmeticException
v System.OverFlowException
Trang 18Tự tạo lớp exception
Trang 19VD truy xuất file
Trang 20Tóm tắt
chẽ hơn Tránh terminate chương trình đột ngột vì những lỗi runtime
hàm các vấn đề phát sinh lúc runtime
xử lý ngoại lệ trong NET
phát sinh ngoại lệ trong chương trình