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
là
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 địa—bao 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
là
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