导出 (0) 打印
全部展开
此文章由机器翻译。 将光标移到文章的句子上,以查看原文。 更多信息。
译文
原文

IFormattable 接口

提供将对象的值格式化为字符串表示形式的功能。

命名空间:  System
程序集:  mscorlib(在 mscorlib.dll 中)

[ComVisibleAttribute(true)]
public interface IFormattable

IFormattable 类型公开以下成员。

  名称说明
公共方法由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持ToString使用指定的格式格式化当前实例的值。
页首

IFormattable 接口基于格式字符串和格式提供程序将对象转换为它的字符串表示形式。

格式字符串通常定义对象的常规外观。 例如,.NET Framework 支持下列格式字符串:

还可以定义您自己的格式字符串,以支持对应用程序定义的类型进行格式设置。

格式提供程序返回一个格式设置对象,该对象通常定义在将对象转换为它的字符串表示形式时使用的符号。 例如,在将数字转换为货币值时,格式提供程序定义显示在结果字符串中的货币符号。 .NET Framework 定义了三种格式提供程序:

此外,还可以定义您自己的自定义格式提供程序,以提供在格式设置中使用的区域性特定、职业特定或行业特定信息。 有关使用自定义格式提供程序实现自定义格式设置的更多信息,请参见 ICustomFormatter

IFormattable 接口定义单一方法 ToString,该方法为实现类型提供格式设置服务。 ToString 方法可直接调用。 此外,它还由 Convert.ToString(Object)Convert.ToString(Object, IFormatProvider) 方法以及使用 .NET Framework 中复合格式设置功能的方法自动调用。 其中,这些方法包括 Console.WriteLine(String, Object)String.FormatStringBuilder.AppendFormat(String, Object) 会为 ToString 方法的格式字符串中的每个格式项调用该方法一次。

IFormattable 接口由基础数据类型实现。

对实现者的说明

需要比 Object.ToString 提供的对字符串格式设置的控制更多控制的类应实现 IFormattable

实现 IFormattable 的类必须支持“G”(常规)格式说明符。 除“G”说明符外,该类还可以定义它支持的格式说明符的列表。 此外,该类必须准备好处理作为 null 的格式说明符。 有关格式化和格式化代码的更多信息,请参见 格式化类型

下面的示例定义一个实现 IFormattable 接口的 Temperature 类。 此类支持四种格式说明符:"G"和"C",指示要将温度显示为摄氏度;"F",指示要将温度显示为华氏度;"K",指示要将温度显示为开氏度。 此外,IFormattable.ToString 实现还可以处理作为 null 的格式字符串或空的格式字符串。 Temperature 类定义的其他两个 ToString 方法只是包装对 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)


.NET Framework

受以下版本支持:4.5.2、4.5.1、4.5、4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持:4、3.5 SP1

可移植类库

受以下版本支持:可移植类库

适用于 Windows 应用商店应用的 .NET

受以下版本支持:Windows 8

适用于 Windows Phone 应用的 .NET

受以下版本支持:Windows Phone 8、Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带 SP1 或更高版本的服务器核心角色;不支持 Itanium)

.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参阅.NET Framework 系统要求

社区附加资源

添加
显示:
© 2014 Microsoft