http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Xử lý ngoại lệ (Exception Handling) C# Một Exception (ngoại lệ) vấn đề xuất thực thi chương trình Một Exception C# phản hồi tình ngoại lệ mà xuất chương trình chạy, ví dụ chia cho số Exception cung cấp cách để truyền điều khiển từ phần chương trình tới phần khác Exception Handling (Xử lý ngoại lệ) C# xây dựng dựa từ khóa là: try, catch, finally, throw try: Một khối try nhận diện khối code mà exception cụ thể kích hoạt Nó theo sau nhiều khối catch catch: Một chương trình bắt Exception với Exception Handler vị trí chương trình nơi bạn muốn xử lý vấn đề Từ khóa catch C# dẫn việc bắt exception finally: Một khối finally sử dụng để thực thi tập hợp lệnh cho, có hay khơng exception đươc ném khơng ném Ví dụ, bạn mở file, phải đóng, khơng có exception tạo throw: Một chương trình ném exception có vấn đề xuất Điều thực sử dụng từ khóa throw C# Cú pháp Giả sử khối tạo Exeption, phương thức bắt exception sử dụng kết hợp từ khóa try catch Một khối try/catch đặt xung quanh code mà tạo exception Code bên khối try/catch xem code bảo vệ, cú pháp để sử dụng try/catch C# sau: try { // statements causing exception } catch( ExceptionName e1 ) http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com { // error handling code } catch( ExceptionName e2 ) { // error handling code } catch( ExceptionName eN ) { // error handling code } finally { // statements to be executed } Bạn liệt kê nhiều lệnh catch để bắt kiểu exception khác trường hợp khối try bạn xuất nhiều exception tình khác Lớp Exception C# Các Exception C# biểu diễn lớp Các lớp Exception C# chủ yếu kế thừa cách trực tiếp không trực tiếp từ lớp System.Exception C# Một số lớp Exception kế thừa từ lớp System.Exception lớpSystem.ApplicationException System.SystemException Lớp System.ApplicationException hỗ trợ exception tạo chương trình ứng dụng Vì thế, exception định nghĩa lập trình viên nên kế thừa từ lớp Lớp System.SystemException lớp sở cho tất system exception tiền định nghĩa Bảng sau cung cấp số lớp Exception tiền định nghĩa kế thừa từ lớpSytem.SystemException C#: Lớp Exception Miêu tả http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com System.IO.IOException Xử lý I/O error System.IndexOutOfRangeException Xử lý lỗi tạo phương thức tham chiếu tới mục bên dãy mảng System.ArrayTypeMismatchException Xử lý lỗi tạo kiểu không phù hợp với kiểu mảng System.NullReferenceException Xử lý lỗi tạo từ việc tham chiếu đối tượng null System.DivideByZeroException Xử lý lỗi tạo chia cho số System.InvalidCastException Xử lý lỗi tạo ép kiểu System.OutOfMemoryException Xử lý lỗi tạo từ việc thiếu nhớ rỗi System.StackOverflowException Xử lý lỗi tạo từ việc tràn ngăn xếp (stack) Xử lý ngoại lệ ( Exception Handling) C# C# cung cấp giải pháp mang tính cấu trúc cao để xử lý ngoại lệ form khối try catch Sử dụng khối này, lệnh chương trình phân biệt riêng rẽ với lệnh xử lý ngoại lệ C# Những khối xử lý ngoại lệ triển khai sử dụng từ khóa try, catch finallytrong C# Ví dụ sau ném exception chia cho số using System; namespace ErrorHandlingApplication { class DivNumbers { int result; http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com DivNumbers() { result = 0; } public void division(int num1, int num2) { try { result = num1 / num2; } catch (DivideByZeroException e) { Console.WriteLine("Exception caught: {0}", e); } finally { WriteLine("Result: {0}", result); } } static void Main(string[] args) { DivNumbers d = new DivNumbers(); d.division(25, 0); Console.ReadKey(); } } } Khi code biên dịch thực thi, cho kết quả: Exception caught: System.DivideByZeroException: Attempted to divide by zero at Result: http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Tạo User-Defined Exception C# Bạn định nghĩa exception cho riêng bạn Các lớp User-Defined Exception kế thừa từ lớp ApplicationException C# Ví dụ sau minh họa điều này: using System; namespace UserDefinedException { class TestTemperature { static void Main(string[] args) { Temperature temp = new Temperature(); try { temp.showTemp(); } catch(TempIsZeroException e) { Console.WriteLine("TempIsZeroException: {0}", e.Message); } Console.ReadKey(); } } } public class TempIsZeroException: ApplicationException { public TempIsZeroException(string message): base(message) { } } public class Temperature http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com { int temperature = 0; public void showTemp() { if(temperature == 0) { throw (new TempIsZeroException("Zero Temperature found")); } else { Console.WriteLine("Temperature: {0}", temperature); } } } Khi code biên dịch thực thi, cho kết quả: TempIsZeroException: Zero Temperature found Ném Object C# Bạn ném đối tượng nó: trực tiếp gián tiếp kế thừa từ lớpSystem.Exception C# Bạn sử dụng lệnh throw khối catch để ném đối tượng diện đó: Catch(Exception e) { Throw e } http://vietjack.com/ Trang chia sẻ học online miễn phí Page ... tiếp từ lớp System .Exception C# Một số lớp Exception kế thừa từ lớp System .Exception lớpSystem.ApplicationException System.SystemException Lớp System.ApplicationException hỗ trợ exception tạo chương...http://vietjack.com /csharp/ index.jsp Copyright © vietjack.com { // error handling code } catch( ExceptionName e2 ) { // error handling code } catch( ExceptionName eN ) { // error handling code }... kê nhiều lệnh catch để bắt kiểu exception khác trường hợp khối try bạn xuất nhiều exception tình khác Lớp Exception C# Các Exception C# biểu diễn lớp Các lớp Exception C# chủ yếu kế thừa cách