IFormattable IFormattable IFormattable IFormattable Interface

定義

オブジェクトの値を文字列形式で書式設定する機能を提供します。Provides functionality to format the value of an object into a string representation.

public interface class IFormattable
[System.Runtime.InteropServices.ComVisible(true)]
public interface IFormattable
type IFormattable = interface
Public Interface IFormattable
派生
属性

次の例では、 Temperature インターフェイスを実装する IFormattable クラスを定義しています。The following example defines a Temperature class that implements the IFormattable interface. クラスは、次の 4 つの書式指定子をサポートしています:"G"および"C"、温度を摂氏で表示されることを示します"F"は、温度を華氏; に表示されることを示します"K"は、温度がケルビンで表示されることを示します。The class supports four format specifiers: "G" and "C", which indicate that the temperature is to be displayed in Celsius; "F", which indicates that the temperature is to be displayed in Fahrenheit; and "K", which indicates that the temperature is to be displayed in Kelvin. さらに、IFormattable.ToString実装もある書式指定文字列を処理できるnullまたは空です。In addition, the IFormattable.ToString implementation also can handle a format string that is null or empty. 他の 2 つToStringによって定義されたメソッド、Temperatureクラスへの呼び出しを単純にラップする、IFormattable.ToString実装します。The other two ToString methods defined by the Temperature class simply wrap a call to the IFormattable.ToString implementation.

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));
      }
   }
}
Imports System.Globalization

Public Class Temperature : Implements IFormattable
   Private temp As Decimal
   
   Public Sub New(temperature As Decimal)
      If temperature < -273.15 Then _ 
        Throw New ArgumentOutOfRangeException(String.Format("{0} is less than absolute zero.", _
                                              temperature))
      Me.temp = temperature
   End Sub
   
   Public ReadOnly Property Celsius As Decimal
      Get
         Return temp
      End Get
   End Property
   
   Public ReadOnly Property Fahrenheit As Decimal
      Get
         Return temp * 9 / 5 + 32
      End Get
   End Property
   
   Public ReadOnly Property Kelvin As Decimal
      Get
         Return temp + 273.15d
      End Get
   End Property

   Public Overrides Function ToString() As String
      Return Me.ToString("G", CultureInfo.CurrentCulture)
   End Function
      
   Public Overloads Function ToString(fmt As String) As String
      Return Me.ToString(fmt, CultureInfo.CurrentCulture)
   End Function
   
   Public Overloads Function ToString(fmt As String, provider As IFormatProvider) _
                   As String _
                   Implements IFormattable.ToString
      If String.IsNullOrEmpty(fmt) Then fmt = "G"
      If provider Is Nothing Then provider = CultureInfo.CurrentCulture
      
      Select Case fmt.ToUpperInvariant()
         Case "G", "C"
            Return temp.ToString("F2", provider) + " °C" 
         Case "F"
            Return Fahrenheit.ToString("F2", provider) + " °F"
         Case "K"
            Return Kelvin.ToString("F2", provider) + " K"
         Case Else
            Throw New FormatException(String.Format("The {0} format string is not supported.", fmt))
      End Select
   End Function
End Class

次の例を呼び出して、IFormattable.ToString実装直接、または複合書式指定文字列を使用しています。The following example then calls the IFormattable.ToString implementation either directly or by using a composite format string.

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)
Module Example
   Public Sub Main()
      ' Use composite formatting with format string in the format item.
      Dim temp1 As New Temperature(0)
      Console.WriteLine("{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)", temp1)
      Console.WriteLine()
      
      ' 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)", temp1))
      Console.WriteLine()
      
      ' Call ToString method with format string.
      temp1 = New Temperature(32)
      Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)", _
                        temp1.ToString("C"), temp1.ToString("K"), temp1.ToString("F"))
      Console.WriteLine()

      ' Call ToString with format string and format provider
      temp1 = New Temperature(100)      
      Dim current As NumberFormatInfo = NumberFormatInfo.CurrentInfo
      Dim nl As 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))
   End Sub
End Module
' 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インターフェイス オブジェクトを書式指定文字列と書式プロバイダーに基づいて文字列表現に変換します。The IFormattable interface converts an object to its string representation based on a format string and a format provider.

書式指定文字列は、通常、オブジェクトの全体的な外観を定義します。A format string typically defines the general appearance of an object. たとえば、.NET Framework は、次はサポートします。For example, the .NET Framework supports the following:

アプリケーション定義の型の書式設定をサポートするために、独自の書式指定文字列を定義することもできます。You can also define your own format strings to support formatting of your application-defined types.

書式プロバイダーは、通常オブジェクトを文字列形式に変換することで使用されるシンボルを定義する書式設定オブジェクトを返します。A format provider returns a formatting object that typically defines the symbols used in converting an object to its string representation. たとえば、数値を通貨値に変換すると、書式プロバイダーは結果の文字列に通貨記号を定義します。For example, when you convert a number to a currency value, a format provider defines the currency symbol that appears in the result string. .NET Framework では、次の 3 つの書式プロバイダーを定義します。The .NET Framework defines three format providers:

さらに、カルチャ固有の職業に固有を指定する、独自のカスタム書式プロバイダーを定義するまたは業界固有の情報は、書式設定に使用します。In addition, you can define your own custom format providers to supply culture-specific, profession-specific, or industry-specific information used in formatting. カスタム書式プロバイダーを使用してカスタムの書式設定の実装の詳細については、次を参照してください。ICustomFormatterします。For more information about implementing custom formatting by using a custom format provider, see ICustomFormatter.

IFormattableインターフェイスは、1 つのメソッドを定義します。 ToString、実装する型の書式指定サービスを提供します。The IFormattable interface defines a single method, ToString, that supplies formatting services for the implementing type. ToStringメソッドを直接呼び出すことができます。The ToString method can be called directly. さらに、呼び出されたによって自動的に、Convert.ToString(Object)Convert.ToString(Object, IFormatProvider)メソッド、および使用するメソッドによって、複合書式指定機能in .NET Framework です。In addition, it is called automatically by the Convert.ToString(Object) and Convert.ToString(Object, IFormatProvider) methods, and by methods that use the composite formatting feature in the .NET Framework. このようなメソッドを含めるConsole.WriteLine(String, Object)String.Format、およびStringBuilder.AppendFormat(String, Object)、他のユーザーの間で。Such methods include Console.WriteLine(String, Object), String.Format, and StringBuilder.AppendFormat(String, Object), among others. ToStringメソッドの書式指定文字列の各書式項目のメソッドが呼び出されます。The ToString method is called for each format item in the method's format string.

IFormattableインターフェイス、基本データ型によって実装されます。The IFormattable interface is implemented by the base data types.

注意 (実装者)

クラスをよりも文字列の書式設定制御を必要とするToString()提供を実装する必要がありますIFormattableします。Classes that require more control over the formatting of strings than ToString() provides should implement IFormattable.

実装するクラスIFormattable"G"(一般) 書式指定子をサポートする必要があります。A class that implements IFormattable must support the "G" (general) format specifier. "G"指定子だけでなく、クラスは、サポートされる書式指定子の一覧を定義できます。Besides the "G" specifier, the class can define the list of format specifiers that it supports. クラスは、書式指定子を処理するために準備する必要ありますさらに、nullします。In addition, the class must be prepared to handle a format specifier that is null. 書式設定して、コードの書式設定の詳細については、次を参照してください型の書式設定。For more information about formatting and formatting codes, see Formatting Types

メソッド

ToString(String, IFormatProvider) ToString(String, IFormatProvider) ToString(String, IFormatProvider) ToString(String, IFormatProvider)

指定された書式を使用して現在のインスタンスの値を書式設定します。Formats the value of the current instance using the specified format.

適用対象

こちらもご覧ください