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

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

Đoạn mã dưới đây trình bày các khai báo kiểu và khai báo trường của một lớp khả-tuần-tự-
hóa có tên là

Employee

.

using System;

[Serializable]

public class Employee {

private string name;

private int age;

private string address;

§

}

Các lớp dẫn xuất từ một kiểu khả-tuần-tự-hóa không thừa kế đặc tính

SerializableAttribute

. Để khiến cho các kiểu dẫn xuất là khả-tuần-tự-hóa, bạn

phải khai báo chúng là khả-tuần-tự-hóa bằng cách áp dụng đặc tính

SerializableAttribute

.

Bạn có thể ngăn việc tuần tự hóa một trường nào đó bằng cách áp dụng đặc tính

System.NonSerializedAttribute

cho trường này. Bạn nên ngăn việc tuần tự hóa đối với các

trường sau:

Chứa các kiểu dữ liệu không-khả-tuần-tự-hóa.

Chứa các giá trị có thể không hợp lệ khi đối tượng được giải tuần tự hóa, ví dụ: kết nối
cơ sở dữ liệu, địa chỉ bộ nhớ, ID của tiểu trình, và handle của tài nguyên không-được-
quản-lý.

Chứa các thông tin nhạy cảm hay riêng tư, ví dụ: mật khẩu, khóa mật hóa, và các chi
tiết riêng về người hay tổ chức.

Chứa các dữ liệu dễ dàng tái tạo hay thu lấy được từ các nguồn khác—đặc biệt khi dữ
liệu lớn.

Nếu ngăn việc tuần tự hóa một số trường, bạn phải hiện thực kiểu sao cho bù lại việc những
dữ liệu nào đó sẽ không hiện diện khi một đối tượng được giải tuần tự hóa. Đáng tiếc, bạn
không thể tạo hay thu lấy các trường dữ liệu bị mất trong một phương thức khởi dựng vì
formatter không gọi phương thức khởi dựng trong quá trình giải tuần tự hóa đối tượng. Giải
pháp thông thường nhất là hiện thực mẫu “Lazy Initialization”, trong đó kiểu của bạn sẽ tạo
hay thu lấy dữ liệu ngay lần đầu tiên cần đến.
Đoạn mã dưới đây trình bày một phiên bản đã được chỉnh sửa của lớp

Employee

với đặc tính

NonSerializedAttribute

được áp dụng cho trường

address

, nghĩa là formatter sẽ không tuần

tự hóa giá trị của trường này. Lớp

Employee

hiện thực các thuộc tính công khai dùng để truy

xuất các thành viên dữ liệu riêng, là nơi thuận tiện để hiện thực “Lazy Initialization” cho
trường

address

.

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.