Прочитать на английском

Поделиться через


IFormattable Интерфейс

Определение

Предоставляет функциональные возможности для форматирования значения объекта в представление строки.

C#
public interface IFormattable
C#
[System.Runtime.InteropServices.ComVisible(true)]
public interface IFormattable
Производный
Атрибуты

Примеры

В следующем примере определяется класс Temperature , реализующий интерфейс IFormattable . Класс поддерживает четыре описателя формата: "G" и "C", которые указывают, что температура должна отображаться по Цельсию; "F", который указывает, что температура должна отображаться по Fahrenheit; и "K", который указывает, что температура должна отображаться в Кельвине. Кроме того, реализация IFormattable.ToString также может обрабатывать строку формата, которая является null или пустой. Два других ToString метода, определенных классом , Temperature просто заключают в оболочку IFormattable.ToString вызов реализации.

C#
using System;
using System.Globalization;

public class Temperature : IFormattable
{
   private decimal temp;

   public Temperature(decimal temperature)
   {
      if (temperature < -273.15m)
        throw new ArgumentOutOfRangeException(String.Format("{0} is less than absolute zero.",
                                              temperature));
      this.temp = temperature;
   }

   public decimal Celsius
   {
      get { return temp; }
   }

   public decimal Fahrenheit
   {
      get { return temp * 9 / 5 + 32; }
   }

   public decimal Kelvin
   {
      get { return temp + 273.15m; }
   }

   public override string ToString()
   {
      return this.ToString("G", CultureInfo.CurrentCulture);
   }

   public string ToString(string format)
   {
      return this.ToString(format, CultureInfo.CurrentCulture);
   }

   public string ToString(string format, IFormatProvider provider)
   {
      if (String.IsNullOrEmpty(format)) format = "G";
      if (provider == null) provider = CultureInfo.CurrentCulture;

      switch (format.ToUpperInvariant())
      {
         case "G":
         case "C":
            return temp.ToString("F2", provider) + " °C";
         case "F":
            return Fahrenheit.ToString("F2", provider) + " °F";
         case "K":
            return Kelvin.ToString("F2", provider) + " K";
         default:
            throw new FormatException(String.Format("The {0} format string is not supported.", format));
      }
   }
}

В следующем примере реализация вызывается IFormattable.ToString напрямую или с помощью строки составного формата.

C#
public class Example
{
   public static void Main()
   {
      // Use composite formatting with format string in the format item.
      Temperature temp1 = new Temperature(0);
      Console.WriteLine("{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)\n", temp1);

      // Use composite formatting with a format provider.
      temp1 = new Temperature(-40);
      Console.WriteLine(String.Format(CultureInfo.CurrentCulture, "{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)", temp1));
      Console.WriteLine(String.Format(new CultureInfo("fr-FR"), "{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)\n", temp1));

      // Call ToString method with format string.
      temp1 = new Temperature(32);
      Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)\n",
                        temp1.ToString("C"), temp1.ToString("K"), temp1.ToString("F"));

      // Call ToString with format string and format provider
      temp1 = new Temperature(100)      ;
      NumberFormatInfo current = NumberFormatInfo.CurrentInfo;
      CultureInfo nl = new CultureInfo("nl-NL");
      Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)",
                        temp1.ToString("C", current), temp1.ToString("K", current), temp1.ToString("F", current));
      Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)",
                        temp1.ToString("C", nl), temp1.ToString("K", nl), temp1.ToString("F", nl));
   }
}
// The example displays the following output:
//    0.00 °C (Celsius) = 273.15 K (Kelvin) = 32.00 °F (Fahrenheit)
//
//    -40.00 °C (Celsius) = 233.15 K (Kelvin) = -40.00 °F (Fahrenheit)
//    -40,00 °C (Celsius) = 233,15 K (Kelvin) = -40,00 °F (Fahrenheit)
//
//    32.00 °C (Celsius) = 305.15 K (Kelvin) = 89.60 °F (Fahrenheit)
//
//    100.00 °C (Celsius) = 373.15 K (Kelvin) = 212.00 °F (Fahrenheit)
//    100,00 °C (Celsius) = 373,15 K (Kelvin) = 212,00 °F (Fahrenheit)

Комментарии

Интерфейс IFormattable преобразует объект в его строковое представление на основе строки формата и поставщика формата.

Строка формата обычно определяет общий внешний вид объекта. Например, платформа .NET Framework поддерживает следующее:

Вы также можете определить собственные строки формата для поддержки форматирования определяемых приложением типов.

Поставщик формата возвращает объект форматирования, который обычно определяет символы, используемые при преобразовании объекта в его строковое представление. Например, при преобразовании числа в денежное значение поставщик формата определяет символ валюты, который отображается в результирующей строке. В платформа .NET Framework определены три поставщика формата:

Кроме того, вы можете определить собственные поставщики настраиваемых форматов для предоставления сведений о языке и региональных параметрах, профессиях или отрасли, используемых при форматировании. Дополнительные сведения о реализации настраиваемого форматирования с помощью поставщика настраиваемых форматов см. в разделе ICustomFormatter.

Интерфейс IFormattable определяет один метод , ToStringкоторый предоставляет службы форматирования для реализующего типа. Метод ToString можно вызвать напрямую. Кроме того, он вызывается автоматически методами Convert.ToString(Object) и Convert.ToString(Object, IFormatProvider) , а также методами, которые используют функцию составного форматирования в платформа .NET Framework. К таким методам относятся Console.WriteLine(String, Object), String.Formatсреди прочего, , и StringBuilder.AppendFormat(String, Object). Метод ToString вызывается для каждого элемента форматирования в строке формата метода.

Интерфейс IFormattable реализуется базовыми типами данных.

Примечания для тех, кто реализует этот метод

Классы, которым требуется больший контроль над форматированием строк, чем ToString() предоставляется, должны реализовывать IFormattable.

Класс, реализующий IFormattable , должен поддерживать описатель формата "G" (общий). Помимо описатель "G", класс может определить список описателей формата, которые он поддерживает. Кроме того, класс должен быть подготовлен для обработки описателя формата , который имеет значение null. Дополнительные сведения о форматировании и коде форматирования см. в разделе Типы форматирования.

Методы

ToString(String, IFormatProvider)

Форматирует значение текущего экземпляра, используя указанный формат.

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

См. также раздел