Ler em inglês

Compartilhar via


IFormatProvider.GetFormat(Type) Método

Definição

Retorna um objeto que fornece serviços de formatação para o tipo especificado.

C#
public object GetFormat (Type formatType);
C#
public object? GetFormat (Type? formatType);

Parâmetros

formatType
Type

Um objeto que especifica o tipo de objeto de formato a ser retornado.

Retornos

Object

Uma instância do objeto especificado por formatType, se a implementação IFormatProvider pode fornecer esse tipo de objeto; caso contrário, null.

Exemplos

O exemplo a seguir ilustra o uso de uma classe que implementa a IFormatProvider interface e o GetFormat método. A AcctNumberFormat classe converte um Int64 valor que representa um número de conta em um número de conta formatado de 12 dígitos. Seu GetFormat método retornará uma referência a si mesmo se o formatType parâmetro se referir a uma classe que implementa ICustomFormatter; caso contrário, GetFormat retorna null.

C#
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;
   }
}

Uma instância da AcctNumberFormat classe pode então ser passada como um argumento para um método que fornece serviços de formatação ou análise. Por exemplo, o código a seguir passa uma AcctNumberFormat classe para o String.Format(IFormatProvider, String, Object[]) método para gerar um número de conta formatado de 12 dígitos.

C#
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.

Comentários

GetFormat é um método de retorno de chamada que os métodos de formatação e análise invocam para recuperar informações sobre o formato da cadeia de caracteres de entrada em operações de análise ou o formato da cadeia de caracteres de saída em operações de formatação. formatType No parâmetro, o método de formatação ou análise passa o tipo de objeto necessário para executar sua operação. Se a IFormatProvider implementação puder fornecer esse objeto de formatação ou análise, ele retornará esse objeto. Caso contrário, ele retornará null.

Por exemplo, na chamada ao Int32.ToString(IFormatProvider) método, o argumento do método é um IFormatProvider objeto que fornece informações sobre como a representação de cadeia de caracteres da instância inteiro atual pode ser formatada. Quando o runtime executa o método, ele chama o IFormatProvider método do GetFormat objeto e passa um Type objeto que representa o NumberFormatInfo tipo. Se o IFormatProvider objeto puder fornecer um NumberFormatInfo objeto, ele retornará esse objeto. Se não puder fornecer um objeto desse tipo, ele retornará null.

Você pode implementar a IFormatProvider interface e o GetFormat método em classes que fornecem serviços de formatação ou análise personalizados. A IFormatProvider implementação é então passada como um argumento para qualquer sobrecarga de um método de análise ou formatação que tenha um parâmetro de tipo IFormatProvider, como String.Format(IFormatProvider, String, Object[]), Int32.ToString(String, IFormatProvider)ou DateTime.Parse(String, IFormatProvider).

Aplica-se a

Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0