Глава.14 .Символы,.строки.и.обработка.текста
Региональные стандарты влияют на форматирование чисел (включая денежные
суммы, целые числа, числа с плавающей точкой и проценты), дат и времени. Метод
ToString
для типа
Guid
, представляющего код GUID, возвращает строку, отобра-
жающую только значение GUID. Региональные стандарты вряд ли нужно учитывать
при создании такой строки, так как она используется только самой программой.
При форматировании числа метод
ToString
«анализирует» параметр
formatProvider
. Если это
null
, метод
ToString
определяет региональные стан-
дарты, связанные с вызывающим потоком, считывая свойство
System.Threading.
Thread.CurrentThread.CurrentCulture
. Оно возвращает экземпляр типа
System.
Globalization.CultureInfo
.
Получив объект,
ToString
считывает его свойства
NumberFormat
для форма-
тирования числа или
DateTimeFormat
для форматирования даты. Эти свойства
возвращают экземпляры
System.Globalization.NumberFormatInfo
и
System.
Globalization.DateTimeFormatInfo
соответственно. Тип
NumberFormatInfo
опи-
сывает группу свойств, таких как
CurrencyDecimalSeparator
,
CurrencySymbol
,
NegativeSign
,
NumberGroupSeparator
и
PercentSymbol
. Аналогично, у типа
Date-
TimeFormatInfo
описаны такие свойства, как
Calendar
,
DateSeparator
,
DayNames
,
LongDatePattern
,
ShortTimePattern
и
TimeSeparator
. Метод
ToString
считывает
эти свойства при создании и форматировании строки.
При вызове метода
ToString
интерфейса
IFormattable
вместо
null
можно пере-
дать ссылку на объект, тип которого реализует интерфейс
IFormatProvider
:
public interface IFormatProvider {
Object GetFormat(Type formatType);
}
Основная идея применения интерфейса
IFormatProvider
такова: реализация
этого интерфейса означает, что экземпляр типа «знает», как обеспечить учет реги-
ональных стандартов при форматировании, а региональные стандарты, связанные
с вызывающим потоком, игнорируются.
Тип
System.Globalization.CultureInfo
— один из немногих определенных
в FCL типов, в которых реализован интерфейс
IFormatProvider
. Если нужно
форматировать строку, скажем, для Вьетнама, следует создать объект
CultureInfo
и передать его
ToString
как параметр
formatProvider
. Вот как формируют стро-
ковое представление числа
Decimal
во вьетнамском формате денежной величины:
Decimal price = 123.54M;
String s = price.ToString("C", new CultureInfo("vi-VN"));
MessageBox.Show(s);
Если собрать и запустить этот код, появится информационное окно (рис. 14.5).
Метод
ToString
типа
Decimal
, исходя из того, что аргумент
formatProvider
отличен от
null
, вызывает метод
GetFormat
объекта:
NumberFormatInfo nfi = (NumberFormatInfo)
formatProvider.GetFormat(typeof(NumberFormatInfo));
Do'stlaringiz bilan baham: |