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
Personas que lo han encontrado útil: 1 de 3 - Valorar este tema

IFormatProvider (Interfaz)

Proporciona un mecanismo para recuperar un objeto con el fin de controlar el formato.

Espacio de nombres:  System
Ensamblado:  mscorlib (en mscorlib.dll)
[ComVisibleAttribute(true)]
public interface IFormatProvider

El tipo IFormatProvider expone los siguientes miembros.

  NombreDescripción
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetFormatDevuelve un objeto que proporciona servicios de formato para el tipo especificado.
Arriba

La interfaz IFormatProvider proporciona un objeto que proporciona información del formato las operaciones de formato y análisis. Las operaciones de formato convierten el valor de un tipo en la representación de cadena de ese valor. Los métodos de formato típicos son los métodos ToString de un tipo, así como Format. Las operaciones de análisis convierten la representación de cadena de un valor en un tipo con ese valor. Los métodos de análisis típicos son Parse y TryParse.

La interfaz IFormatProvider se compone de un solo método, IFormatProvider.GetFormat. GetFormat es un método de devolución de llamada: el método de análisis o formato llama y pasa un objeto Type que representa el tipo de objeto que el método de análisis o formato espera que le proporcione información de formato. El método GetFormat es responsable de devolver un objeto de ese tipo.

Las implementaciones IFormatProvider suelen utilizarse implícitamente mediante métodos de formato y análisis. Por ejemplo, el método DateTime.ToString(String) utiliza una implementación IFormatProvider que representa la referencia cultural actual del sistema implícitamente. Las implementaciones IFormatProvider también se pueden especificar explícitamente mediante métodos con un parámetro de tipo IFormatProvider, como Int32.Parse(String, IFormatProvider) y String.Format(IFormatProvider, String, Object[]).

.NET Framework incluye las siguientes tres implementaciones IFormatProvider predefinidas para proporcionar información específica de la referencia cultural que se utiliza para dar formato o analizar valores numéricos y de fecha y hora:

.NET Framework también proporciona soporte técnico para el formato personalizado. Normalmente, esto implica la creación de una clase de formato que implementa IFormatProvider y ICustomFormatter. A continuación, una instancia de esta clase se pasa como un parámetro a un método que realiza una operación de formato personalizada, como String.Format(IFormatProvider, String, Object[]). El ejemplo proporciona una ilustración de este tipo de implementación personalizada como un número de cuenta de 12 dígitos.

En el siguiente ejemplo se muestra cómo una implementación IFormatProvider puede cambiar la representación de un valor de fecha y hora. En este caso, una fecha única se muestra utilizando objetos CultureInfo que representan cuatro referencias culturales diferentes.


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


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 la actual instancia de AcctNumberFormat si el parámetro formatType hace referencia a una clase que implemente 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;
   }
}


La clase que implemente IFormatProvider podrá usarse en una llamada a una operación de formato y análisis. Por ejemplo, el siguiente código llama al método String.Format(IFormatProvider, String, Object[]) para generar una cadena que contiene 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, 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

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.
¿Te ha resultado útil?
(Caracteres restantes: 1500)
Gracias por sus comentarios

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft. Reservados todos los derechos.