この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

IFormattable インターフェイス

 

公開日: 2016年10月

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

名前空間:   System
アセンブリ:  mscorlib (mscorlib.dll 内)

[ComVisibleAttribute(true)]
public interface IFormattable

名前説明
System_CAPS_pubmethodToString(String, IFormatProvider)

指定された書式を使用して現在のインスタンスの値を書式設定します。

IFormattable インターフェイス オブジェクトを書式指定文字列と書式プロバイダーに基づいて、文字列形式に変換します。

書式指定文字列は、通常、オブジェクトの全般的な外観を定義します。 たとえば、.NET Framework は、次はサポートします。

アプリケーション定義の型の書式をサポートするために、独自の書式指定文字列を定義することもできます。

書式プロバイダーでは、通常の文字列形式にオブジェクトを変換する際に使用する記号を定義する書式指定オブジェクトを返します。 たとえば、数値を通貨値に変換すると、書式プロバイダーは結果文字列に表示する通貨記号を定義します。 .NET Framework では、次の 3 つの書式プロバイダーを定義します。

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

IFormattable インターフェイスが 1 つのメソッドを定義 ToString, 、実装する型の書式指定サービスを提供します。 ToString メソッドを直接呼び出すことができます。 さらに、呼び出されたによって自動的に、 Convert.ToString(Object)Convert.ToString(Object, IFormatProvider) メソッド、および使用するメソッドによって、 複合書式指定機能 .NET Framework でします。 このような方法には、 Console.WriteLine(String, Object), 、String.Format, 、および StringBuilder.AppendFormat(String, Object), などです。 ToString メソッドの書式指定文字列の各書式項目のメソッドが呼び出されます。

IFormattable インターフェイスは、基本データ型によって実装されます。

実装時の注意:

文字列の書式設定より詳細に制御を必要とするクラス Object.ToString は、実装する必要があります IFormattableします。

実装するクラス IFormattable "G"(一般) 書式指定子をサポートする必要があります。 "G"指定子だけでなく、クラスは、サポートされている書式指定子の一覧を定義できます。 さらに、クラスには、書式指定子を処理する準備しなければなりません nullします。 書式設定および書式設定コードの詳細については、次を参照してください。 .NET Framework における型の書式設定

次の例では、Temperature インターフェイスを実装する IFormattable クラスを定義しています。 クラスは、次の 4 つの書式指定子をサポートしています:"G"、"C"、温度を摂氏で表示されることを示します"F"は、温度を華氏; で表示されることを示します"K"は、温度がケルビンで表示されることを示します。 さらに、 IFormattable.ToString 実装も処理書式指定文字列を null または空です。 他の 2 つ ToString によって定義されたメソッド、 Temperature クラスへの呼び出しを単純にラップする、 IFormattable.ToString 実装します。

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 実装直接、または複合書式指定文字列を使用しています。

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)

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
1.1 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能
Windows Phone
8.1 以降で使用可能
トップに戻る
表示: