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

633

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

}

}

}

6.

6.

Hi n th c ki u kh -đ nh-d ng (formattable type)

ự ể

ả ị

Hi n th c ki u kh -đ nh-d ng (formattable type)

ự ể

ả ị

Bạn cần hiện thực một kiểu có thể được sử dụng theo các format string, và có thể
tạo ra những biểu diễn chuỗi khác nhau cho nội dung của nó dựa vào format
specifier
.

Hiện thực giao diện

System.IFormattable

.

Đoạn mã dưới đây minh họa cách sử dụng format specifier (phần in đậm) trong phương thức

WriteLine

của lớp

System.Console

.

double a = 345678.5678;

uint b = 12000;

byte c = 254;

Console.WriteLine("a = {0}, b = {1}, and c = {2}", a, b, c);

Console.WriteLine("a = {0:c0}, b = {1:n4}, and c = {2,10:x5}", a, b, c);

Khi chạy trên máy với thiết lập bản địa là English (U.K.), đoạn mã này sẽ cho kết xuất như
sau (thay đổi nội dung của format specifier sẽ thay đổi định dạng của kết xuất một cách đáng
kể mặc dù dữ liệu vẫn không thay đổi):

a = 345678.5678, b = 12000, and c = 254

a = £345,679, b = 12,000.0000, and c = 000fe

Để kích hoạt việc hỗ trợ format specifier, bạn phải hiện thực giao diện

IFormattable

. Giao

diện này khai báo một phương thức có tên là

ToString

với chữ ký như sau:

string ToString(string format, IFormatProvider formatProvider);

Đối số

format

là một

System.String

chứa format string (chuỗi định dạng). Format string là

phần format specifier phía sau dấu hai chấm. Ví dụ, trong format specifier

{2,10:x5}

(ở ví dụ

trên), "

x5

" là format string. Format string chứa những chỉ thị mà thể hiện

IFormattable

sẽ sử

dụng khi tạo ra dạng chuỗi cho nội dung của nó. Tài liệu .NET Framework phát biểu rằng:
những kiểu có hiện thực

IFormattable

thì phải hỗ trợ format string "

G

" (general), nhưng

những format string được hỗ trợ khác thì phụ thuộc vào hiện thực. Đối số

format

null

nếu

format specifier không chứa phần format string, ví dụ

{0}

hay

{1,20}

.

Đối số

formatProvider

là tham chiếu đến một thể hiện

System.IFormatProvider

(dùng để truy

xuất các thông tin bản địabao gồm các dữ liệu như biểu tượng tiền tệ hay số lượng chữ số
thập phân). Theo mặc định,

formatProvider

null

, nghĩa là bạn sẽ sử dụng các thiết lập bản

địa của tiểu trình hiện hành (có thể lấy được thông qua phương thức tĩnh

CurrentCulture

của

lớp

System.Globalization.CultureInfo

).

.NET Framework chủ yếu sử dụng

IFormattable

để hỗ trợ việc định dạng các kiểu giá trị,

nhưng nó có thể được sử dụng cho bất kỳ kiểu nào. Ví dụ, lớp

Person

dưới đây có hiện thực

giao diện

IFormattable

. Lớp này chứa danh hiệu và tên của một người, và sẽ trả về tên theo

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.