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
Este tópico ainda não foi avaliado como - Avalie este tópico

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 fornece serviços de formatação para o tipo especificado.
Superior

O IFormatProvider interface fornece um objeto que fornece informações de formatação para formatação e análise de operações. Operações de formatação converter o valor de um tipo para a representação de seqüência de caracteres desse valor. Métodos típicos de formatação são o ToString métodos de um tipo, bem como Format. Análise de operações converter a representação de seqüência de caracteres de um valor para um tipo com esse valor. Métodos de análise típicos são Parse e TryParse.

O IFormatProvider interface consiste em um único método, IFormatProvider.GetFormat. GetFormat é um método de retorno de chamada: A análise ou formatação método faz a chamada e passa um Type o objeto que representa o tipo de objeto que espera a formatação ou análise do método fornecerá informações de formatação. O GetFormat método é responsável por retornar um objeto desse tipo.

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

A.NET Framework inclui os três seguintes predefinidos IFormatProvider implementações para fornecer informações específicas de cultura que são usadas em formatação ou análise de valores numéricos e a data e hora:

  • O NumberFormatInfo classe, que fornece informações que são usadas para formatar números, como, por exemplo, a moeda, milhares separador e símbolos do separador decimal para uma determinada cultura.

  • O DateTimeFormatInfo classe, que fornece informações que são usadas para formatar datas e horas, como, por exemplo, os símbolos de separador de data e hora para uma determinada cultura ou a ordem e a forma de componentes do dia, mês e ano uma data.

  • O CultureInfo classe que representa uma determinada cultura. Sua GetFormat método retorna um culture-specific NumberFormatInfo ou DateTimeFormatInfo o objeto, dependendo se a CultureInfo objeto é usado em uma formatação ou análise de operação que envolva números ou datas e horas.

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

O exemplo a seguir ilustra como um IFormatProvider implementação pode alterar a representação de um valor de data e hora. Nesse caso, uma única data é exibida, usando CultureInfo objetos 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 o IFormatProvider interface e o GetFormat método. O AcctNumberFormat classe converte um Int64 valor que representa um número de conta em um número de conta de 12 dígitos formatado. Sua GetFormat método retorna uma referência ao atual AcctNumberFormat se a instância do formatType parâmetro se refere a uma classe que implementa ICustomFormatter; Caso contrário, GetFormat retorna null.


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 usado em uma chamada para uma formatação e análise de operação. Por exemplo, o seguinte código chama o String.Format(IFormatProvider, String, Object[]) método para gerar uma seqüência de caracteres que contém um número de conta de 12 dígitos formatado.


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, 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

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 de sistema do NET Framework.
Isso foi útil para você?
(1500 caracteres restantes)

Contribuições da comunidade

ADICIONAR
© 2013 Microsoft. Todos os direitos reservados.