Thông tin tài liệu:
Tham khảo tài liệu lập trình môn csharp_4, công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Nội dung trích xuất từ tài liệu:
Lập trình môn Csharp_4Quản lý lỗi Gvhd: Nguyễn Tấn Trần Minh KhangTrong ví dụ này dòng thông báo Close file here luôn luôn xuất hiện, cho dù biệtlệ có xảy ra hay không. Ghi chú: khối lệnh finally có thể được tạo mà không cần khối catch, nhưng bắt buộc phải có khối try. Không thể dùng các lệnh break, continue, return và goto trong khối finally.11.2 Đối tượng ExceptionĐối tượng System.Exception cung cấp nhiều phương thức và property hữu íchcho việc bẫy lỗi. Chẳng hạn property Message cung cấp thông tin tại sao nó đượcném. Message là thuộc tính chỉ đọc, nó được thiết đặt vào lúc khởi tạo biệt lệ.Property HelpLink cung cấp một kết nối đến tập tin giúp đỡ. Property này có thểđọc và thiết đặt. Property StackTrace chỉ đọc và được thiết lập vào lúc chạy.Trong ví dụ 11-6, property Exception.HelpLink được thiết đặt và nhận về đểthông tin thêm cho người dùng về biệt lệ DivideByZeroException. PropertyStackTrace được dùng để cung cấp các vết của vùng nhớ stack. Nó hiển thịhàng loạt các phương thức đã gọi dẫn đến phương thức mà biệt lệ được ném ra.Ví dụ 11-6. Làm việc với đối tượng Exception using System; namespace Programming_CSharp { public class Test { public static void Main( ) { Test t = new Test( ); t.TestFunc( ); } public void TestFunc( ) { try { Console.WriteLine(Open file here); double a = 12; double b = 0; Console.WriteLine ({0} / {1} = {2}, a, b, DoDivide(a,b)); Console.WriteLine (This line may or may not print); } catch (System.DivideByZeroException e) { Console.WriteLine(
DivideByZeroException! Msg: {0}, e.Message); Console.WriteLine(
HelpLink: {0}, e.HelpLink); Console.WriteLine(
Heres a stack trace: {0}
, e.StackTrace); } catch 80Quản lý lỗi Gvhd: Nguyễn Tấn Trần Minh Khang { Console.WriteLine(Unknown exception caught); } finally { Console.WriteLine (Close file here.); } } public double DoDivide(double a, double b) { if (b == 0) { DivideByZeroException e = new DivideByZeroException(); e.HelpLink = http://www.libertyassociates.com; throw e; } if (a == 0) throw new ArithmeticException( ); return a / b; } } } Kết quả: Open file here DivideByZeroException! Msg: Attempted to divide by zero. HelpLink: http://www.libertyassociates.com Heres a stack trace: at Programming_CSharp.Test.DoDivide(Double a, Double b) in c:...exception06.cs:line 56 at Programming_CSharp.Test.TestFunc( ) in...exception06.cs:line 22 Close file here.Kết quả liệt kê các phương thức theo trình tự ngược với trình tự chúng được gọi.Đọc kết quả trên như sau: Có một biệt lệ xảy ra tại hàm DoDivide(), hàmDoDivide này được gọi bởi hàm TestFunc().Trong ví dụ này ta tạo một thể hiện của DivideByZeroException DivideByZeroException e = new DivideByZeroException();Do không truyền tham số, thông báo mặc định được dùng: DivideByZeroException! Msg: Attempted to divide by zero.Ta có thể thay thông báo mặc định này bằng cách truyền tham số khi khởi tạo: new DivideByZeroException( You tried to divide by zero which is not meaningful);Trong trường hợp này kết quả sẽ là: DivideByZeroException! Msg:You tried to divide by zero which is not meaningfulTrước khi ném biệt lệ này, ta thiết đặt thuộc tính HelpLink e.HelpLink = http://www.libertyassociates.com;Khi biệt lệ được bắt, chương trình in thông báo và cả đường dẫn đến kết nối giúp đỡ catch (System.DivideByZeroException e) 81Quản lý lỗi Gvhd: Nguyễn Tấn Trần Minh Khang { Console.WriteLine(
DivideByZeroException! Msg: {0}, e.Message); Console.WriteLine(
HelpLink: {0}, e.HelpLink);Nhờ vậy ta có thể cung cấp các thông tin cần thiết cho người dùng. Sau đó là inStackTrace Console.WriteLine(
Heres a stack trace:{0}, e.StackTrace);Ta có kết quả cuối cùng.11.3 Các biệt lệ tự tạoVới các biệt lệ có thể tùy biến thông báo do CLR cung cấp, thường đủ cho hầu hếtcác ứng dụng. Tuy nhiên sẽ có lúc ta muốn thêm nhiều dạng thông tin hơn cho đốitượng biệt lệ, khi đó ta phải tự tạo lấy các biệt lệ mong muốn. Biệt lệ tự tạo bắt buộcthừa kế từ lớp System.Exception. Ví dụ 11-7 mô tả cách tạo một biệt lệ mới.Ví dụ 11-7. Tự tạo biệt lệ using System; namespace Prog ...