英語で読む

次の方法で共有


IFormattable インターフェイス

定義

オブジェクトの値を文字列形式で書式設定する機能を提供します。

C#
public interface IFormattable
C#
[System.Runtime.InteropServices.ComVisible(true)]
public interface IFormattable
派生
属性

次の例では、 Temperature インターフェイスを実装する IFormattable クラスを定義しています。 クラスは、"G" と "C" の 4 つの書式指定子をサポートしています。これは、温度が摂氏で表示されることを示します。"F", これは、温度が華氏で表示されることを示します;と "K" は、温度がケルビンに表示されることを示します。 さらに、実装では IFormattable.ToStringnull または空の書式指定文字列を処理することもできます。 クラスによって定義されているTemperature他の 2 つのToStringメソッドは、実装の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では、次の 3 つの形式プロバイダーが定義されています。

さらに、独自のカスタム書式プロバイダーを定義して、書式設定で使用されるカルチャ固有、職業固有、または業界固有の情報を提供できます。 カスタム書式プロバイダーを使用したカスタム書式の実装の詳細については、「」を参照してください ICustomFormatter

インターフェイスは IFormattableToString実装する型の書式設定サービスを提供する 1 つのメソッド を定義します。 メソッドは ToString 直接呼び出すことができます。 さらに、 メソッドと Convert.ToString(Object, IFormatProvider) メソッド、および .NET Frameworkの複合書式設定機能を使用するメソッドによって自動的Convert.ToString(Object)に呼び出されます。 このようなメソッドには 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

こちらもご覧ください