Číst v angličtině

Sdílet prostřednictvím


IFormattable Rozhraní

Definice

Poskytuje funkce pro formátování hodnoty objektu do řetězcové reprezentace.

public interface IFormattable
[System.Runtime.InteropServices.ComVisible(true)]
public interface IFormattable
Odvozené
Atributy

Příklady

Následující příklad definuje Temperature třídu, která implementuje IFormattable rozhraní . Třída podporuje čtyři specifikátory formátu: "G" a "C", které označují, že teplota má být zobrazena ve stupních Celsia; "F", což označuje, že teplota má být zobrazena ve fahrenheit; a "K", což označuje, že teplota má být zobrazena v kelvinu. Kromě toho IFormattable.ToString může implementace také zpracovat formátovací řetězec, který je null nebo prázdný. Další dvě ToString metody definované Temperature třídou jednoduše zabalí volání IFormattable.ToString implementace.

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));
      }
   }
}

Následující příklad pak zavolá implementaci IFormattable.ToString buď přímo, nebo pomocí složeného řetězce formátu.

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)

Poznámky

Rozhraní IFormattable převede objekt na jeho řetězcovou reprezentaci na základě řetězce formátu a zprostředkovatele formátu.

Formátovací řetězec obvykle definuje obecný vzhled objektu. Například rozhraní .NET Framework podporuje následující:

Můžete také definovat vlastní formátovací řetězce pro podporu formátování typů definovaných aplikací.

Zprostředkovatel formátu vrátí objekt formátování, který obvykle definuje symboly používané při převodu objektu na jeho řetězcovou reprezentaci. Když například převedete číslo na hodnotu měny, poskytovatel formátu definuje symbol měny, který se zobrazí ve výsledném řetězci. Rozhraní .NET Framework definuje tři zprostředkovatele formátu:

Kromě toho můžete definovat vlastní zprostředkovatele formátů, kteří budou poskytovat informace o formátování specifické pro jazykovou verzi, konkrétní povolání nebo odvětví. Další informace o implementaci vlastního formátování pomocí zprostředkovatele vlastního formátu najdete v tématu ICustomFormatter.

Rozhraní IFormattable definuje jednu metodu, ToString, která poskytuje služby formátování pro implementovaný typ. Metodu ToString lze volat přímo. Kromě toho je volána automaticky metodami Convert.ToString(Object) a Convert.ToString(Object, IFormatProvider) a metodami, které používají funkci složeného formátování v rozhraní .NET Framework. Mezi tyto metody patří Console.WriteLine(String, Object)mimo jiné , String.Formata StringBuilder.AppendFormat(String, Object). Metoda je ToString volána pro každou položku formátu v řetězci formátu metody.

Rozhraní IFormattable je implementováno základními datovými typy.

Poznámky pro implementátory

Třídy, které vyžadují větší kontrolu nad formátováním řetězců, než ToString() poskytuje, by měly implementovat IFormattable.

Třída, která implementuje IFormattable , musí podporovat specifikátor formátu "G" (obecný). Kromě specifikátoru "G" může třída definovat seznam specifikátorů formátu, které podporuje. Kromě toho musí být třída připravená na zpracování specifikátoru formátu, který je null. Další informace o formátování a kódech formátování najdete v tématu Typy formátování.

Metody

ToString(String, IFormatProvider)

Formátuje hodnotu aktuální instance pomocí zadaného formátu.

Platí pro

Produkt Verze
.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

Viz také