Đối tượng Exception

Một phần của tài liệu Phát triển ứng dụng cơ sở dữ liệu với c và net framework (Trang 56 - 59)

Chương 7 Quản lý lỗ

7.2. Đối tượng Exception

Đối tượng System.Exception cung cấp nhiều phương thức và property hữu ích cho việc bẫy lỗi. Chẳng hạn property Message cung cấp thông tin tại sao nó được né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. Property StackTrace

đượ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.

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( "\nDivideByZeroException! Msg: {0}", e.Message); Console.WriteLine("\nHelpLink: {0}", e.HelpLink);

Console.WriteLine("\nHere's a stack trace: {0}\n", e.StackTrace); } catch { } 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

Here's 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àm DoDivide 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 meaningful

Trướ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) {

Console.WriteLine("\nDivideByZeroException! Msg: {0}", e.Message); Console.WriteLine("\nHelpLink: {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à in StackTrace

Console.WriteLine("\nHere's a stack trace:{0}", e.StackTrace); Ta có kết quả cuối cùng.

Một phần của tài liệu Phát triển ứng dụng cơ sở dữ liệu với c và net framework (Trang 56 - 59)

Tải bản đầy đủ (PDF)

(192 trang)