¿Le resultó útil esta página?
Sus comentarios sobre este contenido son muy importantes. Háganos saber su opinión.
¿Tiene comentarios adicionales?
Caracteres restantes: 1500
Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

IFormatProvider.GetFormat (Método)

Devuelve un objeto que proporciona servicios de formato para el tipo especificado.

Espacio de nombres:  System
Ensamblado:  mscorlib (en mscorlib.dll)

Object GetFormat(
	Type formatType
)

Parámetros

formatType
Tipo: System.Type
Objeto que especifica el tipo de objeto de formato que se va a devolver.

Valor devuelto

Tipo: System.Object
Instancia del objeto especificado por formatType si la implementación de IFormatProvider puede proporcionar ese tipo de objeto; de lo contrario, devuelve null.

GetFormat es un método de devolución de llamada que los métodos de formato y análisis invocan para recuperar información sobre el formato de la cadena de entrada en las operaciones de análisis o sobre el formato de la cadena de salida en las operaciones de formato. En el parámetro formatType, el método de formato o análisis pasa el tipo de objeto que requiere para llevar a cabo la operación. Si la implementación de IFormatProvider puede proporcionar este objeto de formato o análisis, lo devolverá. De lo contrario, devolverá null.

Por ejemplo, en la llamada al método Int32.ToString(IFormatProvider), el argumento del método es un objeto IFormatProvider que proporciona información sobre cómo se puede aplicar formato a la representación de cadena de la actual instancia del entero. Cuando el motor en tiempo de ejecución ejecuta el método, llama al método GetFormat del objeto IFormatProvider y le pasa un objeto Type que representa el tipo de NumberFormatInfo. Si el objeto IFormatProvider puede proporcionar un objeto NumberFormatInfo, devolverá ese objeto. Si no puede proporcionar un objeto de ese tipo, devolverá null.

Puede implementar la interfaz IFormatProvider y el método GetFormat en las clases que proporcionan servicios de formato o análisis personalizados. La implementación de IFormatProvider se pasará como un argumento a cualquier sobrecarga de un método de análisis o formato que tenga un parámetro de tipo IFormatProvider, como String.Format(IFormatProvider, String, Object[]), Int32.ToString(String, IFormatProvider) o DateTime.Parse(String, IFormatProvider).

En el siguiente ejemplo de código se muestra el uso de una clase que implementa la interfaz IFormatProvider y el método GetFormat. La clase AcctNumberFormat convierte un valor Int64 que representa un número de cuenta en un número de cuenta de 12 dígitos con formato. Su método GetFormat devuelve una referencia a sí mismo si el parámetro formatType hace referencia a una clase que implementa ICustomFormatter; de lo contrario, GetFormat devuelve 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 continuación, se puede pasar una instancia de la clase AcctNumberFormat como argumento a un método que proporcione servicios de formato o análisis. Por ejemplo, el siguiente código pasa una clase AcctNumberFormat al método String.Format(IFormatProvider, String, Object[]) para generar un número de cuenta de 12 dígitos con formato.


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

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

.NET para aplicaciones de Windows Phone

Compatible con: 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 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft