Tìm hiểu C# và ứng dụng của C# p 13
Số trang: 9
Loại file: pdf
Dung lượng: 486.74 KB
Lượt xem: 11
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Chương 11 Quản lý lỗiC# quản lý lỗi và các trạng thái bất thường bằng biệt lệ (exception). Một biệt lệ là một đối tượng chứa các thông tin về sự cố bất thường của chương trình. Điều quan trọng trước hết là phải phân biệt rõ sự khác nhau giữa bug, error và biệt lệ. Bug là lỗi về mặt lập trình do chính lập trình viên không kiểm soát được mã nguồn. Biệt lệ không thể sửa các bug. Mặc dù bug sẽ phát sinh (ném) một biệt lệ, chúng ta không nên dựa vào các biệt lệ...
Nội dung trích xuất từ tài liệu:
Tìm hiểu C# và ứng dụng của C# p 13Quản lý lỗi Gvhd: Nguyễn Tấn Trần Minh KhangChương 11 Quản lý lỗiC# quản lý lỗi và các trạng thái bất thường bằng biệt lệ (exception). Một biệt lệ làmột đối tượng chứa các thông tin về sự cố bất thường của chương trình.Điều quan trọng trước hết là phải phân biệt rõ sự khác nhau giữa bug, error và biệtlệ. Bug là lỗi về mặt lập trình do chính lập trình viên không kiểm soát được mãnguồn. Biệt lệ không thể sửa các bug. Mặc dù bug sẽ phát sinh (ném) một biệt lệ,chúng ta không nên dựa vào các biệt lệ để sửa các bug, mà nên viết lại mã nguồncho đúng.Error là lỗi gây ra bởi người dùng. Chẳng hạn như người dùng nhập một con số thayvì phải nhập các ký tự chữ cái. Một error cũng ném ra một biệt lệ, nhưng ta có thểngăn chặn bằng cách bắt lấy lỗi này, yêu cầu người dùng chỉnh sửa cho đến khi hợplệ. Bất cứ khi nào có thể, error nên được tiên đoán trước và ngăn chặn.Ngay cả khi các bug đã được sửa, các error đã được tiên đoán hết thì vẫn còn nhiềutình huống không thể lường trước như: hệ thống đã hết bộ nhớ hay chương trìnhđang truy cập một tập tin không tồn tại…. Chúng ta không thể ngăn chặn được biệtlệ nhưng có lại có thể quản lý được chúng để chúng không làm gẫy đỗ ứng dụng.Khi chương trình gặp phải tình huống trên, chẳng hạn hết bộ nhớ, nó sẽ ném (phátsinh) một biệt lệ. Khi một biệt lệ được ném ra, hàm đang thực thi sẽ bị tạm dừng vàvùng nhớ stack sẽ được duyệt ngược cho đến khi gặp trình giải quyết biệt lệ.Điều này có nghĩa là nếu hàm hiện hành không có trình giải quyết biệt lệ thì hàm sẽbị ngắt và hàm gọi sẽ có cơ hội để giải quyết lỗi. Nếu không có hàm gọi nào giảiquyết biệt lệ thì biệt lệ sẽ được ném cho CLR giải quyết. Điều này đồng nghĩa vớiviệc chương trình sẽ bị dừng một cách bất thường.Trình quản lý lỗi (exception handler) là một đoạn mã được thiết kế để giải quyết cácbiệt lệ được ném ra. Trình giải quyết lỗi được cài đặt trong khối lệnh bắt đầu bởi từkhóa catch{}. Một cách lý tưởng thì khi biệt lệ được bắt và giải quyết thì chươngtrình tiếp tục thực thi và vấn đề được giải quyết. Ngay cả trong trường hợp chươngtrình không thể tiếp tục được thì bằng cách bắt biệt lệ ta vẫn còn một cơ hội in (hoặcghi lại thành tập tin) các thông báo lỗi và kết thúc chương trình một êm đẹp.Nếu trong hàm có những đoạn mã phải được thực thi bất chấp có hay không có xảyra biệt lệ (như đoạn mã giải phóng các nguồn lực được cấp phát), đoạn mã này nênđược bỏ trong khối lệnh finnally{}. 72Quản lý lỗi Gvhd: Nguyễn Tấn Trần Minh Khang11.1 Ném và bắt biệt lệTrong C# chúng ta có thể ném bất kỳ một đối tượng nào thuộc lớp hay lớp con củalớp System.Exception (viết tắt là Exception). Vùng tên System khai báo sẵnnhiều lớp biệt lệ hữu ích chẳng hạn như ArgumentNullException,InValidCastException, OverflowException…11.1.1 Lệnh ném throwĐể báo hiệu một tình huống bất thường trong một lớp C#, ta ném ra một biệt lệbằng cách sử dụng từ khóa throw. Dòng lệnh sau tạo một thể hiện của lớpException và sau đó ném nó ra throw new System.Exception();Ném một biệt lệ sẽ làm chương trình tạm dừng lập tức và CLR tìm kiếm một trìnhquản lý biệt lệ. Nếu hàm ném không có trình giải quyết biệt lệ, stack sẽ đượcduyệt ngược (unwind) bằng cách pop ra cho đến khi gặp được trình giải quyết biệtlệ. Nếu vẫn không tìm thấy cho đến tận hàm Main(), chương trình sẽ bị dừng lại.Ví dụ 11-1. Ném một biệt lệ using System; namespace Programming_CSharp { public class Test { public static void Main( ) { Console.WriteLine(Enter Main...); Test t = new Test( ); t.Func1( ); Console.WriteLine(Exit Main...); } public void Func1( ) { Console.WriteLine(Enter Func1...); Func2( ); Console.WriteLine(Exit Func1...); } public void Func2( ) { Console.WriteLine(Enter Func2...); throw new System.Exception( ); Console.WriteLine(Exit Func2...); } } } Kết quả: Enter Main... Enter Func1... Enter Func2... Exception occurred: System.Exception: An exception of type System.Exception was thrown. at Programming_CSharp.Test.Func2( ) 73Quản lý lỗi Gvhd: Nguyễn Tấn Trần Minh Khang in ...exceptions01.cs:line 26 at Programming_CSharp.Test.Func1( ) in ...exceptions01.cs:line 20 at Programming_CSharp.Test.Main( ) in ...exceptions01.cs:line 12Ví dụ trên in thông báo ra màn hình console khi bắt đầu và kết thúc mỗi hàm.Hàm Main() tạo một đối tượng kiểu Test và gọi hàm Func1(). Sau khi in thôngbáo Enter Func1, hàm Func1() gọi hàm Func2(). Func2() in ra câu thôngbáo bắt đầu và ném ra một biệt lệ.Chương trình sẽ tạm ngưng thực thi và CLR tìm trình giải ...
Nội dung trích xuất từ tài liệu:
Tìm hiểu C# và ứng dụng của C# p 13Quản lý lỗi Gvhd: Nguyễn Tấn Trần Minh KhangChương 11 Quản lý lỗiC# quản lý lỗi và các trạng thái bất thường bằng biệt lệ (exception). Một biệt lệ làmột đối tượng chứa các thông tin về sự cố bất thường của chương trình.Điều quan trọng trước hết là phải phân biệt rõ sự khác nhau giữa bug, error và biệtlệ. Bug là lỗi về mặt lập trình do chính lập trình viên không kiểm soát được mãnguồn. Biệt lệ không thể sửa các bug. Mặc dù bug sẽ phát sinh (ném) một biệt lệ,chúng ta không nên dựa vào các biệt lệ để sửa các bug, mà nên viết lại mã nguồncho đúng.Error là lỗi gây ra bởi người dùng. Chẳng hạn như người dùng nhập một con số thayvì phải nhập các ký tự chữ cái. Một error cũng ném ra một biệt lệ, nhưng ta có thểngăn chặn bằng cách bắt lấy lỗi này, yêu cầu người dùng chỉnh sửa cho đến khi hợplệ. Bất cứ khi nào có thể, error nên được tiên đoán trước và ngăn chặn.Ngay cả khi các bug đã được sửa, các error đã được tiên đoán hết thì vẫn còn nhiềutình huống không thể lường trước như: hệ thống đã hết bộ nhớ hay chương trìnhđang truy cập một tập tin không tồn tại…. Chúng ta không thể ngăn chặn được biệtlệ nhưng có lại có thể quản lý được chúng để chúng không làm gẫy đỗ ứng dụng.Khi chương trình gặp phải tình huống trên, chẳng hạn hết bộ nhớ, nó sẽ ném (phátsinh) một biệt lệ. Khi một biệt lệ được ném ra, hàm đang thực thi sẽ bị tạm dừng vàvùng nhớ stack sẽ được duyệt ngược cho đến khi gặp trình giải quyết biệt lệ.Điều này có nghĩa là nếu hàm hiện hành không có trình giải quyết biệt lệ thì hàm sẽbị ngắt và hàm gọi sẽ có cơ hội để giải quyết lỗi. Nếu không có hàm gọi nào giảiquyết biệt lệ thì biệt lệ sẽ được ném cho CLR giải quyết. Điều này đồng nghĩa vớiviệc chương trình sẽ bị dừng một cách bất thường.Trình quản lý lỗi (exception handler) là một đoạn mã được thiết kế để giải quyết cácbiệt lệ được ném ra. Trình giải quyết lỗi được cài đặt trong khối lệnh bắt đầu bởi từkhóa catch{}. Một cách lý tưởng thì khi biệt lệ được bắt và giải quyết thì chươngtrình tiếp tục thực thi và vấn đề được giải quyết. Ngay cả trong trường hợp chươngtrình không thể tiếp tục được thì bằng cách bắt biệt lệ ta vẫn còn một cơ hội in (hoặcghi lại thành tập tin) các thông báo lỗi và kết thúc chương trình một êm đẹp.Nếu trong hàm có những đoạn mã phải được thực thi bất chấp có hay không có xảyra biệt lệ (như đoạn mã giải phóng các nguồn lực được cấp phát), đoạn mã này nênđược bỏ trong khối lệnh finnally{}. 72Quản lý lỗi Gvhd: Nguyễn Tấn Trần Minh Khang11.1 Ném và bắt biệt lệTrong C# chúng ta có thể ném bất kỳ một đối tượng nào thuộc lớp hay lớp con củalớp System.Exception (viết tắt là Exception). Vùng tên System khai báo sẵnnhiều lớp biệt lệ hữu ích chẳng hạn như ArgumentNullException,InValidCastException, OverflowException…11.1.1 Lệnh ném throwĐể báo hiệu một tình huống bất thường trong một lớp C#, ta ném ra một biệt lệbằng cách sử dụng từ khóa throw. Dòng lệnh sau tạo một thể hiện của lớpException và sau đó ném nó ra throw new System.Exception();Ném một biệt lệ sẽ làm chương trình tạm dừng lập tức và CLR tìm kiếm một trìnhquản lý biệt lệ. Nếu hàm ném không có trình giải quyết biệt lệ, stack sẽ đượcduyệt ngược (unwind) bằng cách pop ra cho đến khi gặp được trình giải quyết biệtlệ. Nếu vẫn không tìm thấy cho đến tận hàm Main(), chương trình sẽ bị dừng lại.Ví dụ 11-1. Ném một biệt lệ using System; namespace Programming_CSharp { public class Test { public static void Main( ) { Console.WriteLine(Enter Main...); Test t = new Test( ); t.Func1( ); Console.WriteLine(Exit Main...); } public void Func1( ) { Console.WriteLine(Enter Func1...); Func2( ); Console.WriteLine(Exit Func1...); } public void Func2( ) { Console.WriteLine(Enter Func2...); throw new System.Exception( ); Console.WriteLine(Exit Func2...); } } } Kết quả: Enter Main... Enter Func1... Enter Func2... Exception occurred: System.Exception: An exception of type System.Exception was thrown. at Programming_CSharp.Test.Func2( ) 73Quản lý lỗi Gvhd: Nguyễn Tấn Trần Minh Khang in ...exceptions01.cs:line 26 at Programming_CSharp.Test.Func1( ) in ...exceptions01.cs:line 20 at Programming_CSharp.Test.Main( ) in ...exceptions01.cs:line 12Ví dụ trên in thông báo ra màn hình console khi bắt đầu và kết thúc mỗi hàm.Hàm Main() tạo một đối tượng kiểu Test và gọi hàm Func1(). Sau khi in thôngbáo Enter Func1, hàm Func1() gọi hàm Func2(). Func2() in ra câu thôngbáo bắt đầu và ném ra một biệt lệ.Chương trình sẽ tạm ngưng thực thi và CLR tìm trình giải ...
Tìm kiếm theo từ khóa liên quan:
Tìm hiểu ngôn ngữ C# C# và .Net Framework lập trình c# ngôn ngữ C# tài liệu c#Gợi ý tài liệu liên quan:
-
161 trang 129 1 0
-
Giáo trình Kỹ thuật lập trình nâng cao (Ngành: Tin học ứng dụng) - CĐ Kinh tế Kỹ thuật TP.HCM
119 trang 66 0 0 -
33 trang 65 0 0
-
thủ thuật windows XP hay nhất phần 2
14 trang 41 0 0 -
1 trang 41 0 0
-
Bài giảng Lập trình Windows Form với C#: Chương 1 - Lê Thị Ngọc Hạnh
56 trang 33 0 0 -
Tự học C# bằng hình ảnh cho người mới bắt đầu: Phần 1
88 trang 30 0 0 -
hướng dẫn sử dụng Rhino Ceros phần 6
12 trang 26 0 0 -
1 trang 25 0 0
-
accounting reference desktop 2002 phần 6
64 trang 25 0 0