Здравствуйте, хочу разобраться с IFormatable
и IFormatProvider
ToString
у IFormatable
принимает два параметра. Первый нужен, что бы понимать как форматировать, а второй тоже самое только более подробное и конкретное описание. Вопрос вот какой, зачем тогда первый, если второй уже все содержит? Они вообще могут друг другу противоречить. К примеру я первым параметром указал, что у цифр в качестве разделителя должна быть точка, а второй параметр(моя культура) утверждает, что должна быть запятая.IFormatProvider
у него есть метод object
GetFormat
(Type formatType). Вопрос, вот почему он возвращает object? Да это же можно, что угодно вернуть, почему его не сделали хотя бы обобщенным? К примеру ToString у double пытается IFormatProvider
привести к CultureInfo
или NumberFormatInfo
(тогда да, он понимает к чему можно привести результат GetFormat
). Да с чего он взял что я вообще передам ему какой из этих типов (CultureInfo
или NumberFormatInfo
)?1) Как сказано в документации, форматная строка обычно управляет общим видом результата, в то время как провайдер формата определяет конкретные символы, используемые для этого общего вида.
Обычно в качестве провайдера формата выступает язык. Например, если вы хотите полный формат даты на немецком языке, то вы указываете в форматной строке, что вам нужна именно длинная дата, а провайдером формата выбираете CultureInfo.GetCultureInfo("de-DE")
.
Если бы разделения не было, вам пришлось бы передавать ещё и язык в форматной строке, и она стала бы малообозримой. Кроме того, довольно часто вы хотите локализацию вашего приложения, то есть вы хотите оставить одинаковую форматную строку (смысл вашего форматирования), и менять в зависимости от предпочтений юзера провайдер (конкретный язык, из которого берутся правила). Так что такое разделение на части имеет практический смысл.
почему он возвращает object?
Потому что он был добавлен в .NET Framework 1.1
, когда ещё не было обобщений
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В коде ниже бесконечно выполняется (повторяется) одно действиеВ чем может быть проблема?
Можно ли подгрузить следующую сцену в текущей, но не запускать её? К Примеру, метод SceneManagerLoadSceneAsync() запускает сцену сразу после загрузки
как распознать текущую ссылку, это просто ссылка или на файл?Ps