CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 637

637

Chương 16: Các giao diện và mẫu thông dụng

System.FormatException

—khi mã lệnh truyền cho phương thức một đối số

String

chứa

dữ liệu không được định dạng đúng.

Nếu không có lớp ngoại lệ nào đáp ứng được nhu cầu của bạn, hoặc bạn cảm thấy ứng dụng
của bạn sẽ được lợi từ việc sử dụng các ngoại lệ đặc-trưng-ứng-dụng, bạn có thể tạo một lớp
ngoại lệ cho mình. Để tích hợp ngoại lệ tùy biến với cơ chế thụ lý ngoại lệ của bộ thực thi và
vẫn giữ tính nhất quán với mẫu được hiện thực bởi các lớp ngoại lệ có sẵn, bạn cần:

Đặt một tên có ý nghĩa cho lớp ngoại lệ tùy biến, kết thúc bằng từ

Exception

, chẳng

hạn,

TypeMismatchException

hay

RecordNotFoundException

.

Thừa kế lớp

ApplicationException

. Về cơ bản, lớp ngoại lệ tùy biến phải thừa kế lớp

System.Exception

, nếu không trình biên dịch sẽ dựng lên lỗi khi bạn ném ngoại lệ.

ApplicationException

thừa kế

Exception

và được đề nghị làm lớp sơ sở cho tất cả các

lớp ngoại lệ đặc-trưng-ứng-dụng.

Đánh dấu lớp ngoại lệ tùy biến là

sealed

nếu bạn không muốn các lớp ngoại lệ khác có

thể thừa kế nó.

Hiện thực thêm các thuộc tính và các thành viên dữ liệu để hỗ trợ các thông tin tùy biến
mà lớp ngoại lệ này cung cấp.

Hiện thực ba phương thức khởi dựng

public

với chữ ký như dưới đây và bảo đảm

chúng gọi phương thức khởi dựng của lớp cơ sở:

public CustomException() : base() {}

public CustomException(string message): base(message) {}

public CustomException(string message, Exception inner)

: base(message, inner) {}

Làm cho lớp ngoại tùy biến trở nên khả-tuần-tự-hóa để bộ thực thi có thể marshal các
thể hiện của nó qua các biên miền ứng dụng và biên máy. Áp dụng đặc tính

System.SerializableAttribute

thường là đã đủ cho các lớp ngoại lệ không hiện thực

các thành viên dữ liệu tùy biến. Tuy nhiên, vì

Exception

hiện thực giao diện

System.Runtime.Serialization.ISerializable

nên nếu ngoại lệ của bạn có khai báo

các thành viên dữ liệu tùy biến, bạn phải chép đè phương thức

ISerializable.GetObjectData

của lớp

Exception

cũng như hiện thực một phương thức

khởi dựng giải tuần tự hóa với chữ ký như dưới đây. Nếu lớp ngoại lệ của bạn là

sealed

, đánh dấu phương thức khởi dựng giải tuần tự hóa là

private

; nếu không thì

đánh dấu nó là

protected

.

private CustomException(SerializationInfo info,

StreamingContext context) {}

Phương thức

GetObjectData

và phương thức khởi dựng giải tuần tự hóa phải gọi

phương thức tương đương trong lớp cơ sở để cho phép lớp cơ sở thực hiện tuần tự hóa
và giải tuần tự hóa dữ liệu của nó một cách đúng đắn (xem mục 16.1 để biết cách làm
cho một lớp trở nên khả-tuần-tự-hóa).

Dưới đây là một lớp ngoại lệ tùy biến có tên là

CustomException

(thừa kế lớp

ApplicationException

). Lớp này khai báo hai thành viên dữ liệu tùy biến: một chuỗi có tên là

stringInfo

và một giá trị luận lý có tên là

booleanInfo

.

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.