Danh mục

XỬ LÝ NGOẠI LỆ phần 1

Số trang: 11      Loại file: pdf      Dung lượng: 192.02 KB      Lượt xem: 13      Lượt tải: 0    
Thu Hiền

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

XỬ LÝ NGOẠI LỆ · Phát sinh và bắt giữ ngoại lệ · Câu lệnh throw
Nội dung trích xuất từ tài liệu:
XỬ LÝ NGOẠI LỆ phần 1XỬ LÝ NGOẠI LỆ · Phát sinh và bắt giữ ngoại lệ · Câu lệnh throw · Câu lệnh catch · Câu lệnh finally · Những đối tượng ngoại lệ · Tạo riêng các ngoại lệ · Phát sinh lại ngoại lệ · Câu hỏi & bài tập Ngôn ngữ C# cũng giống như bất cứ ngôn ngữ hướng đối tượng khác, chophép xử lý những lỗi và các điều kiện không bình thường với những ngoại lệ. Ngoạilệ là một đối tượng đóng gói những thông tin về sự cố của một chương trình khôngbình thường. Một điều quan trọng để phân chia giữa bug, lỗi, và ngoại lệ. Một bug là một lỗi lập trình có thể được sửa chữa trước khi mã nguồn được chuyển giao. Những ngoại lệ thì không được bảo vệ và tương phản với những bug. Mặc dù một bug có thể là nguyên nhân sinh ra ngoại lệ, chúng ta cũng không dựa vào những ngoại lệ để xử lý những bug trong chương trình, tốt hơnlà chúng ta nên sửa chữa những bug này. Một lỗi có nguyên nhân là do phía hành động của người sử dụng. Ví dụ, ngườisử dụng nhập vào một số nhưng họ lại nhập vào ký tự chữ cái. Một lần nữa, lỗi cóthể làm xuất hiện ngoại lệ, nhưng chúng ta có thể ngăn ngừa điều này bằng cáchbắt giữ lỗi với mã hợp lệ. Những lỗi có thể được đoán trước và được ngăn ngừa. Thậm chí nếu chúng ta xóa tất cả những bug và dự đoán tất cả các lỗi của ngườidùng, chúng ta cũng có thể gặp phải những vấn đề không mong đợi, như là xuấthiện trạng thái thiếu bộ nhớ (out of memory), thiếu tài nguyên hệ thống,... nhữngnguyên nhân này có thể do các chương trành khác cùng hoạt động ảnh hưởng đến.Chúng ta không thể ngăn ngừa các ngoại lệ này, nhưng chúng ta có thể xử lý chúngđể chúng không thể làm tổn hại đến chương trình. Khi một chương trình gặp một tình huống ngoại lệ, như là thiếu bộ nhớ thì nó sẽtạo một ngoại lệ. Khi một ngoại lệ được tạo ra, việc thực thi của các chức năng hiệnhành sẽ bị treo cho đến khi nào việc xử lý ngoại lệ tương ứng được tìm thấy. Điều này có nghĩa rằng nếu chức năng hoạt động hiện hành không thực hiệnviệc xử lý ngoại lệ, thì chức năng này sẽ bị chấm dứt và hàm gọi sẽ nhận sự thayđổi đến việc xử lý ngoại lệ. Nếu hàm gọi này không thực hiện việc xử lý ngoại lệ,ngoại lệ sẽ được xử lý sớm bởi CLR, điều này dẫn đến chương trình của chúng ta sẽkết thúc. Một trình xử lý ngoại lệ là một khối lệnh chương trình được thiết kế xử lý cácngoại lệ mà chương trình phát sinh. Xử lý ngoại lệ được thực thi trong trong câu lệnhcatch. Một cách lý tưởng thì nếu một ngoại lệ được bắt và được xử lý, thì chươngtrình có thể sửa chữa được vấn đề và tiếp tục thực hiện hoạt động. Thậm chí nếuchương trình không tiếp tục, bằng việc bắtgiữ ngoại lệ chúng ta có cơ hội để in ra những thông điệp có ý nghĩa và kết thúc chươngtrình một cách rõ ràng. Nếu đoạn chương trình của chúng ta thực hiện mà không quan tâm đến bất cứngoại lệ nào mà chúng ta có thể gặp (như khi giải phóng tài nguyên mà chương trìnhđược cấp phát), chúng ta có thể đặt đoạn mã này trong khối finally, khi đó nó sẽ chắcchắn sẽ được thực hiện thậm chí ngay cả khi có một ngoại lệ xuất hiện.Phát sinh và bắt giữ ngoại lệ Trong ngôn ngữ C#, chúng ta chỉ có thể phát sinh (throw) những đối tượng cáckiểu dữ liệu là System.Exception, hay những đối tượng được dẫn xuất từ kiểudữ liệu này. Namespace System của CLR chứa một số các kiểu dữ liệu xử lý ngoạilệ mà chúng ta có thể sử dụng trong chương trình. Những kiểu dữ liệu ngoại lệnày bao gồm ArgumentNull- Exception, InValidCastException, vàOverflowException, cũng như nhiều lớp khác nữa.Câu lệnh throw Để phát tín hiệu một sự không bình thường trong một lớp của ngôn ngữ C#, chúng taphát sinh một ngoại lệ. Để làm được điều này, chúng ta sử dụng từ khóa throw. Dònglệnh sau tạora một thể hiện mới của System.Exception và sau đó throw nó: throw new System.Exception();Khi phát sinh ngoại lệ thì ngay tức khắc sẽ làm ngừng việc thực thi trong khi CLRsẽ tìm kiếm một trình xử lý ngoại lệ. Nếu một trình xử lý ngoại lệ không đượctìm thấy trong phương thức hiện thời, thì CLR tiếp tục tìm trong phương thức gọicho đến khi nào tìm thấy. Nếu CLR trả về lớp Main() mà không tìm thấy bất cứ trìnhxử lý ngoại lệ nào, thì nó sẽ kết thúc chương trình. Ví dụ 13.1: Throw ngoại lệ.-----------------------------------------------------------------------------namespace Programming_CSharp{using System;public classTest{ 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 wasthrow. at Programming_CSharp.Test.Func2() in ... exception01.cs:line 26 at Programming_CSharp.Test.Func1() in ... exception01.cs:line 20 at Programming_CSharp.Test.Main() in ... exception01.cs:line 12-----------------------------------------------------------------------------Ví dụ minh họa đơn giản này viết ra màn hình console thông tin khi nó nhập vàotrong một hàm và chuẩn bị đi ra từ một ...

Tài liệu được xem nhiều: