intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Giáo trình phân tích ứng dụng nguyên lý testfunc khi thực hiện chia với zero p2

Chia sẻ: Sdfasf Fasf | Ngày: | Loại File: PDF | Số trang:5

51
lượt xem
4
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

(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 { Console.WriteLine(“Unknown exception caught”); } } // thực hiện phép chia hợp lệ public double DoDivide( double a, double b) { if ( b == 0) { DivideByZeroException e = new DivideByZeroException(); e.HelpLink = “http://www.hcmunc.edu.vn”; throw e; } if ( a == 0) { throw new ArithmeticException(); } return a/b; } } } ...

Chủ đề:
Lưu

Nội dung Text: Giáo trình phân tích ứng dụng nguyên lý testfunc khi thực hiện chia với zero p2

  1. . Ngôn Ngữ Lập Trình C# 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 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 { Console.WriteLine(“Unknown exception caught”); } } // thực hiện phép chia hợp lệ public double DoDivide( double a, double b) { if ( b == 0) { DivideByZeroException e = new DivideByZeroException(); e.HelpLink = “http://www.hcmunc.edu.vn”; throw e; } if ( a == 0) { throw new ArithmeticException(); } return a/b; } } } 377 . Xử Lý Ngoại Lệ
  2. . Ngôn Ngữ Lập Trình C# -----------------------------------------------------------------------------  Kết quả: Open file here DivideByZeroExceptión Msg: Attempted to divide by zero HelpLink: http://www.hcmuns.edu.vn Here’s a stack trace: at Programming_CSharp.Test.DoDivide(Double c, Double b) in c:\...exception06.cs: line 56 at Programming_CSharp.Test.TestFunc() in ...exception06.cs: line 22. Close file here ----------------------------------------------------------------------------- Trong đoạn kết quả trên, danh sách trace của stack được hiển thị theo thứ tự ngược lại thứ tự gọi. Nó hiển thị một lỗi trong phương thức DoDivde(), phương thức này được gọi từ phương thức TestFunc(). Khi các phương thức gọi lồng nhau nhiều cấp, thông tin stack có thể giúp chúng ta hiểu thứ tự của các phương thức được gọi. Trong ví dụ này, hơn là việc đơn giản phát sinh một DidiveByZeroException, chúng ta tạo một thể hện mới của ngoại lệ: DivideByZeroException e = new DivideByZeroException(); Chúng ta không truyền vào thông điệp của chúng ta, nên thông điệp mặc định sẽ được in ra: DivideByZeroException! Msg: Attemped to divide by zero. Ở đây chúng ta có thể bổ sung như dòng lệnh bên dưới để truyền vào thông điệp của chúng ta tùy chọn như sau: new DivideByZeroException(“You tried to divide by zero which is not meaningful”); Trước khi phát sinh ra ngoại lệ, chúng ta thiết lập thuộc tính HelpLink như sau: e.HelpLink = “http://www.hcmunc.edu.vn”; Khi ngoại lệ được bắt giữ, chương trình sẽ in thông điệp và HelpLink ra màn hình: catch (System.DivideByZeroException e) { Console.WriteLine(“\nDivideByZeroException! Msg: {0}”, e.Message); Console.WriteLine(“\nHelpLink: {0}”, e.HelpLink); } Việc làm này cho phép chúng ta cung cấp những thông tin hữu ích cho người sử dụng. Thêm vào đó thông tin stack cũng được đưa ra bằng cách sử dụng thuộc tính StackTrace của đối tượng ngoại lệ: Console.WriteLine(“\n Here’s a stack trace: {0}\n”, e.StackTrace); Kết quả là các vết trong stack sẽ được xuất ra: Here’s a stack trace: at Programming_CSharp.Test.DoDivide(Double c, Double b) 378 . Xử Lý Ngoại Lệ
  3. . Ngôn Ngữ Lập Trình C# in c:\...exception06.cs: line 56 at Programming_CSharp.Test.TestFunc() in ...exception06.cs: line 22. Lưu ý rằng, phần đường dẫn được viết tắt, do đó kết quả của bạn có thể hơi khác một tí. Bảng 13.1 sau mô tả một số các lớp ngoại lệ chung được khai báo bên trong namespace System. CÁC LỚP NGOẠI LỆ Tên ngoại lệ Mô tả Lỗi truy cập, do truy cập đến thành viên hay MethodAccessException phương thức không được truy cập Lỗi tham số đối mục ArgumentException Đối mục Null, phương thức được truyền đối mục ArgumentNullException null không được chấp nhận Lỗi liên quan đến các phép toán ArithmeticException Kiểu mảng không hợp, khi cố lưu trữ kiểu không ArrayTypeMismatchException thích hợp vào mảng Lỗi chia zero DivideByZeroException Định dạng không chính xác một đối mục nào đó FormatException Chỉ số truy cập mảng không hợp lệ, dùng nhỏ hơn IndexOutOfRangeException chỉ số nhỏ nhất hay lớn hơn chỉ số lớn nhất của mảng Phép gán không hợp lệ InvalidCastException Multicast không được hỗ trợ, do việc kết hợp hai MulticastNotSupportedException delegate không đúng Không phải số hữu hạn, số không hợp lệ NotFiniteNumberException Phương thức không hỗ trợ, khi gọi một phương NotSupportedException thức không tồn tại bên trong lớp. Tham chiếu null không hợp lệ. NullReferenceException Out of memory OutOfMemoryException Lỗi tràn phép toán OverflowException Tràn stack StackOverflowException Kiểu khởi tạo sai, khi bộ khởi dựng tĩnh có lỗi. TypeInitializationException Bảng 13.1 : Các ngoại lệ thường xuất hiện. Tạo riêng các ngoại lệ CLR cung cấp những kiểu dữ liệu ngoại lệ cơ bản, trong ví dụ trước chúng ta đã tạo một vài các kiểu ngoại lệ riêng. Thông thường chúng ta cần thiết phải cung cấp các thông tin mở rộng cho khối catch khi một ngoại lệ được phát sinh. Tuy nhiên, có những lúc chúng ta 379 . Xử Lý Ngoại Lệ
  4. . Ngôn Ngữ Lập Trình C# muốn cung cấp nhiều thông tin mở rộng hay là các khả năng đặc biệt cần thiết trong ngoại lệ mà chúng ta tạo ra. Chúng ta dễ dàng tạo ra các ngoại lệ riêng, hay còn gọi là các ngoại lệ tùy chọn (custom exception), điều bắt buộc với các ngoại lệ này là chúng phải được dẫn xuất từ System.ApplicationException. Ví dụ 13.7 sau minh họa việc tạo một ngoại lệ riêng.  Ví dụ: Tạo một ngoại lệ riêng. ----------------------------------------------------------------------------- namespace Programming_CSharp { using System; // tạo ngoại lệ riêng public class MyCustomException : System.ApplicationException { public MyCustomException( string message): base(message) { } } public class Test { public static void Main() { Test t = new Test(); t.TestFunc(); } // chia hai số và xử lý ngoại lệ public void TestFunc() { try { Console.WriteLine(“Open file here”); double a = 0; double b = 5; Console.WriteLine(“{0} /{1} = {2}”, a, b, DoDivide(a,b)); Console.WriteLine(“This line may or not print”); } catch (System.DivideByZeroException e) { Console.WriteLine(“\nDivideByZeroException! Msg: {0}”, e.Message); 380 . Xử Lý Ngoại Lệ
  5. . Ngôn Ngữ Lập Trình C# Console.WriteLine(“\nHelpLink: {0}”, e.HelpLink); } catch (MyCustomException e) { Console.WriteLine(“\nMyCustomException! Msg: {0}”, e.Message); Console.WriteLine(“\nHelpLink: {0}”, e.HelpLink); } catch { Console.WriteLine(“Unknown excepiton caught”); } finally { Console.WriteLine(“Close file here.”); } } // thực hiện phép chia hợp lệ public double DoDivide( double a, double b) { if ( b == 0) { DivideByZeroException e = new DivideByZeroException(); e.HelpLink = “http://www.hcmunc.edu.vn”; throw e; } if ( a == 0) { MyCustomException e = new MyCustomException(“Can’t have zero divisor”); e.HelpLink = “http://www.hcmuns.edu.vn”; throw e; } return a/b; } } } ----------------------------------------------------------------------------- 381 . Xử Lý Ngoại Lệ
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2