Exportar (0) Imprimir
Expandir Tudo
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original

Interface IFormatProvider

Fornece um mecanismo para recuperar um objeto para controlar a formatação.

Namespace:  System
Assembly:  mscorlib (em mscorlib.dll)

[ComVisibleAttribute(true)]
public interface IFormatProvider

O tipo IFormatProvider expõe os membros a seguir.

  NomeDescrição
Método públicoCompatível com o XNA FrameworkCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreGetFormatRetorna um objeto que forneça serviços de formatação para o tipo especificado.
Superior

A interface de IFormatProvider fornece um objeto que fornece informações de formatação para formatar e operações de análise. Operações de formatação converte o valor de um tipo a representação de cadeia de caracteres desse valor. Os métodos típicos de formatação são métodos de ToString de um tipo, bem como Format. Operações de análise convertem a representação de cadeia de caracteres de um valor para um tipo com esse valor. Os métodos típicos de análise são Parse e TryParse.

A interface de IFormatProvider consiste em um único método, IFormatProvider.GetFormat. GetFormat é um método callback: O método de análise ou chamá-lo de formatação e passa um objeto de Type que representa o tipo de objeto que a formatação ou o método de análise esperam fornecerão informações de formatação. O método de GetFormat é responsável para retornar um objeto do tipo.

as implementações deIFormatProvider são freqüentemente usadas implicitamente formatação e análise métodos. Por exemplo, o método de DateTime.ToString(String) usa implicitamente uma implementação de IFormatProvider que representa a cultura atual do sistema. as implementações deIFormatProvider também podem ser especificados explicitamente por métodos que têm um parâmetro do tipo IFormatProvider, como Int32.Parse(String, IFormatProvider) e String.Format(IFormatProvider, String, Object[]).

O.NET Framework inclui as três implementações predefinidas de IFormatProvider para fornecer informações específicas da cultura que é usada na formatação ou a análise numérico e a data e valores de tempo:

O .NET Framework também suporta formatação personalizada. Isso normalmente envolve a criação de uma classe de formatação que implementa IFormatProvider e ICustomFormatter. Uma instância dessa classe é então passado como um parâmetro para um método que executa uma operação de formatação personalizado, como String.Format(IFormatProvider, String, Object[]) que o exemplo fornece uma ilustração de uma implementação tão personalizado que formata um número como um número de conta de 12 dígitos.

O exemplo a seguir ilustra como uma implementação de IFormatProvider pode alterar a representação de uma data e valor de tempo. Nesse caso, uma única data é exibida usando objetos de CultureInfo que representam quatro diferentes culturas.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      DateTime dateValue = new DateTime(2009, 6, 1, 4, 37, 0);
      CultureInfo[] cultures = { new CultureInfo("en-US"), 
                                 new CultureInfo("fr-FR"),
                                 new CultureInfo("it-IT"),
                                 new CultureInfo("de-DE") };
      foreach (CultureInfo culture in cultures)
         Console.WriteLine("{0}: {1}", culture.Name, dateValue.ToString(culture));
   }
}
// The example displays the following output:
//       en-US: 6/1/2009 4:37:00 PM
//       fr-FR: 01/06/2009 16:37:00
//       it-IT: 01/06/2009 16.37.00
//       de-DE: 01.06.2009 16:37:00


O exemplo a seguir ilustra o uso de uma classe que implementa a interface de IFormatProvider e o método de GetFormat . A classe de AcctNumberFormat converter um valor de Int64 que representa um número de conta para um número de conta formatado de 12 dígitos. O método de GetFormat retorna uma referência à instância atual de AcctNumberFormat se o parâmetro de formatType refere-se a uma classe que implementa ICustomFormatter; caso contrário, retorna nullde GetFormat .


public class AcctNumberFormat : IFormatProvider, ICustomFormatter
{
   private const int ACCT_LENGTH = 12;

   public object GetFormat(Type formatType)
   {
      if (formatType == typeof(ICustomFormatter))
         return this;
      else
         return null;
   }

   public string Format(string fmt, object arg, IFormatProvider formatProvider) 
   {
      // Provide default formatting if arg is not an Int64.
      if (arg.GetType() != typeof(Int64))
         try {
            return HandleOtherFormats(fmt, arg); 
         }
         catch (FormatException e) {
            throw new FormatException(String.Format("The format of '{0}' is invalid.", fmt), e);
         }

      // Provide default formatting for unsupported format strings.
      string ufmt = fmt.ToUpper(CultureInfo.InvariantCulture);
      if (! (ufmt == "H" || ufmt == "I")) 
         try {
            return HandleOtherFormats(fmt, arg);
         }
         catch (FormatException e) {
            throw new FormatException(String.Format("The format of '{0}' is invalid.", fmt), e);
         }

      // Convert argument to a string.
      string result = arg.ToString();

      // If account number is less than 12 characters, pad with leading zeroes.
      if (result.Length < ACCT_LENGTH)
         result = result.PadLeft(ACCT_LENGTH, '0');
      // If account number is more than 12 characters, truncate to 12 characters.
      if (result.Length > ACCT_LENGTH)
         result = result.Substring(0, ACCT_LENGTH);   

      if (ufmt == "I")                    // Integer-only format. 
         return result;
      // Add hyphens for H format specifier.
      else                                         // Hyphenated format.
         return result.Substring(0, 5) + "-" + result.Substring(5, 3) + "-" + result.Substring(8);
   }

   private string HandleOtherFormats(string format, object arg)
   {
      if (arg is IFormattable) 
         return ((IFormattable)arg).ToString(format, CultureInfo.CurrentCulture);
      else if (arg != null)
         return arg.ToString();
      else
         return String.Empty;
   }
}


A classe que implementa IFormatProvider pode ser usada em uma chamada para um formatação e uma operação de análise. Por exemplo, o seguinte código chama o método de String.Format(IFormatProvider, String, Object[]) para gerar uma cadeia de caracteres que contém um número de conta formatado de 12 dígitos.


using System;
using System.Globalization;

public enum DaysOfWeek { Monday=1, Tuesday=2 };

public class TestFormatting
{
   public static void Main()
   {
      long acctNumber;
      double balance; 
      DaysOfWeek wday; 
      string output;

      acctNumber = 104254567890;
      balance = 16.34;
      wday = DaysOfWeek.Monday;

      output = String.Format(new AcctNumberFormat(), 
                             "On {2}, the balance of account {0:H} was {1:C2}.", 
                             acctNumber, balance, wday);
      Console.WriteLine(output);

      wday = DaysOfWeek.Tuesday;
      output = String.Format(new AcctNumberFormat(), 
                             "On {2}, the balance of account {0:I} was {1:C2}.", 
                             acctNumber, balance, wday);
      Console.WriteLine(output);
   }
}
// The example displays the following output:
//       On Monday, the balance of account 10425-456-7890 was $16.34.
//       On Tuesday, the balance of account 104254567890 was $16.34.


.NET Framework

Com suporte em: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Com suporte em: 4, 3.5 SP1

Biblioteca de Classes Portátil

Com suporte em: Biblioteca de Classes Portátil

.NET para aplicativos da Windows Store

Com suporte em: Windows 8

.NET para aplicativos do Windows Phone

Com suporte em: 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 (Função Server Core sem suporte), Windows Server 2008 R2 (Função Server Core com suporte com o SP1 ou posterior, Itanium sem suporte)

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte Requisitos do sistema do .NET Framework.

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2015 Microsoft