
Ch ng 11 .ươ Ki m soát ngo i l ể ạ ệ
Exception Handling
Outline
11.1 T ng quan v c ch x lý ngo i lổ ề ơ ế ử ạ ệ
11.2 C u trúc phân c p ngo i l trong .NET ấ ấ ạ ệ
11.3 Finally Block
11.4 Các thu c tính ngo i lộ ạ ệ
11.5 Nh ng l p ngo i l ng i dùng đ nh nghĩaữ ớ ạ ệ ườ ị
11.6 X lý tràn v i toán t checked và uncheckedử ớ ử

11.1 T ng quan v c ch x lý ngo i lổ ề ơ ế ử ạ ệ
X lý ngo i lử ạ ệ
T o ra nh ng ng d ng có th đi u khi n ho c gi i quy t ngo i ạ ữ ứ ụ ể ề ể ặ ả ế ạ
l ệ
Khi n ch ng trình tr nên rõ ràng,m nh và ít l i. ế ươ ở ạ ỗ
T khoáừ
Try
Bao g m nh ng mã mà ngo i l có th x y raồ ữ ạ ệ ể ả
Catch
Gi i thi u nh ng ki u ngo i l mà kh i catch có th x lýớ ệ ữ ể ạ ệ ố ể ử
Finally
Nh ng đo n mã (không b t bu c) đây s luôn đ c th c ữ ạ ắ ộ ở ẽ ượ ự
hi nệ
X lý ngo i lử ạ ệ
S d ng kh i Try-Catch này đ x lý ngo i l d n xu tử ụ ố ể ử ạ ệ ẫ ấ

•Kiểu Catch
–Phải là một lớp Exception hoặc mở rộng của nó một cách trực tiếp
hay gián tiếp
•Stack trải
–CLR cố gắng định vị một khối Try trong phương thức được gọi
11.1 T ng quan v c ch x lý ngo i lổ ề ơ ế ử ạ ệ

Ví d :Chia cho 0ụ DivideByZeroException
V n đấ ề
Trong m t phép chia,khi m u s là 0 s gây tràn s , t o ra l i và ộ ẫ ố ẽ ố ạ ỗ
n u không đ c x lý ch ng trình có th d ng ng d ng ho c đ a ế ượ ử ươ ể ừ ứ ụ ặ ư
ra nh ng ng d ng không nh mong ữ ứ ụ ư đ iợ
•Ph ng pháp ươ
Convert.ToInt32 s t đ ng dò tìm nh ng khuy t t t phát ra t s ẽ ự ộ ữ ế ậ ừ ố
nguyên
• T o ra m t FormatException, t c là đ a ra l i v đ nh d ng.ạ ộ ứ ư ỗ ề ị ạ
- CLR s t đ ng dò tìm phép chia cho s 0, và khi th y s đ a ra ẽ ự ộ ố ấ ẽ ư
DivideByZeroException

1 // DivideByZeroTest.cs
2
3 using System;
4 using System.Drawing;
5 using System.Collections;
6 using System.ComponentModel;
7 using System.Windows.Forms;
8 using System.Data;
9
10 public class DivideByZeroTest : System.Windows.Forms.Form
11 {
12 private System.Windows.Forms.Label numeratorLabel;
13 private System.Windows.Forms.TextBox numeratorTextBox;
14
15 private System.Windows.Forms.Label denominatorLabel;
16 private System.Windows.Forms.TextBox denominatorTextBox;
17
18 private System.Windows.Forms.Button divideButton;
19 private System.Windows.Forms.Label outputLabel;
20
25 // Yêu c u bi n thi t kầ ế ế ế
26 private System.ComponentModel.Container components = null;
27
28 // C u trúc m c đ nhấ ặ ị
29 public DivideByZeroTest()
30 {
32 InitializeComponent();
33 }
34
Nh ng h th ng c b n ữ ệ ố ơ ả
c a c ch x lý ngo i ủ ơ ế ử ạ
l trong C# ệ
L p th hi n cách x lý ớ ể ệ ử
ngo i l t phép chia cho ạ ệ ừ
s 0 trong toán h c s ố ọ ố
nguyên và trong đ nh d ng ị ạ
s h c không chính xácố ọ
Đòi h i h tr b ng ỏ ỗ ợ ằ
thi t k d ng c a s ế ế ạ ử ổ
DivideByZeroTest.cs