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
lượt xem 4
download
(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; } } } ...
Bình luận(0) Đăng nhập để gửi bình luận!
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
- . 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ệ
- . 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ệ
- . 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ệ
- . 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ệ
- . 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ệ
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Giáo trình phân tích ứng dụng lập trình bộ mô phỏng matlab cho hệ thống tưới phun trong dây chuyền chăm sóc cây trồng p2
11 p | 78 | 12
-
Giáo trình phân tích ứng dụng quy trình truy cập các thành phần tùy biến trong mảng có kích thước khác nhau p9
5 p | 71 | 5
-
Giáo trình phân tích ứng dụng cấu tạo và công dụng của máy in theo setup catridge p5
5 p | 74 | 5
-
Giáo trình phân tích ứng dụng cấu tạo và công dụng của máy in theo setup catridge p4
5 p | 76 | 4
-
Giáo trình phân tích ứng dụng cấu tạo và công dụng của máy in theo setup catridge p10
5 p | 89 | 4
-
Giáo trình phân tích ứng dụng cấu tạo và công dụng của máy in theo setup catridge p2
5 p | 68 | 4
-
Giáo trình phân tích ứng dụng cấu tạo và công dụng của máy in theo setup catridge p6
5 p | 65 | 4
-
Giáo trình phân tích ứng dụng cấu tạo và công dụng của máy in theo setup catridge p7
5 p | 59 | 3
-
Giáo trình phân tích ứng dụng những kỹ năng để xử lý lỗi bằng lệnh On error goto p4
5 p | 57 | 3
-
Giáo trình phân tích ứng dụng cấu tạo và công dụng của máy in theo setup catridge p3
5 p | 95 | 3
-
Giáo trình phân tích ứng dụng cấu tạo và công dụng của máy in theo setup catridge p9
5 p | 80 | 3
-
Giáo trình phân tích ứng dụng cấu tạo và công dụng của máy in theo setup catridge p8
5 p | 53 | 3
-
Giáo trình phân tích ứng dụng những kỹ năng để xử lý lỗi bằng lệnh On error goto p2
5 p | 77 | 3
-
Giáo trình phân tích ứng dụng những kỹ năng để xử lý lỗi bằng lệnh On error goto p3
5 p | 49 | 2
-
Giáo trình phân tích ứng dụng những kỹ năng để xử lý lỗi bằng lệnh On error goto p5
5 p | 63 | 2
-
Giáo trình phân tích ứng dụng những kỹ năng để xử lý lỗi bằng lệnh On error goto p6
5 p | 65 | 2
-
Giáo trình phân tích ứng dụng những kỹ năng để xử lý lỗi bằng lệnh On error goto p7
5 p | 53 | 2
-
Giáo trình phân tích ứng dụng những kỹ năng để xử lý lỗi bằng lệnh On error goto p8
5 p | 67 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn