Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

IFormatProvider interface

 

Date de publication : novembre 2016

Fournit un mécanisme pour récupérer un objet afin de contrôler la mise en forme.

Espace de noms:   System
Assembly:  mscorlib (dans mscorlib.dll)

[ComVisibleAttribute(true)]
public interface IFormatProvider

NomDescription
System_CAPS_pubmethodGetFormat(Type)

Retourne un objet qui fournit des services de mise en forme pour le type spécifié.

Le IFormatProvider interface fournit un objet qui fournit des informations de mise en forme pour la mise en forme et des opérations d’analyse. Opérations de mise en forme convertissent la valeur d’un type en la représentation sous forme de chaîne de cette valeur. Méthodes de mise en forme typiques sont les ToString méthodes d’un type, ainsi que Format. Opérations d’analyse convertissent la représentation sous forme de chaîne d’une valeur en un type ayant cette valeur. Méthodes d’analyse typiques sont Parse et TryParse.

Le IFormatProvider interface se compose d’une seule méthode, IFormatProvider.GetFormat. GetFormat est une méthode de rappel : l’analyse ou mise en forme de la méthode appelle et transmet un Type objet qui représente le type d’objet qui attend la mise en forme ou la méthode d’analyse fournit des informations de mise en forme. Le GetFormat méthode est chargée de retourner un objet de ce type.

IFormatProvider les implémentations sont souvent utilisées implicitement par la mise en forme et de méthodes d’analyse. Par exemple, le DateTime.ToString(String) méthode utilise implicitement une IFormatProvider implémentation qui représente la culture actuelle du système. IFormatProvider les implémentations peuvent également être spécifiées explicitement par les méthodes qui ont un paramètre de type IFormatProvider, tel que Int32.Parse(String, IFormatProvider) et String.Format(IFormatProvider, String, Object[]).

Le .NET Framework inclut les trois suivantes prédéfinies IFormatProvider implémentations pour fournir des informations spécifiques à la culture qui sont utilisées dans la mise en forme ou l’analyse des valeurs numériques, de date et d’heure :

Le .NET Framework prend également en charge la mise en forme personnalisée. Cela implique généralement la création d’une classe mise en forme qui implémente à la fois IFormatProvider et ICustomFormatter. Une instance de cette classe est ensuite transmise en tant que paramètre à une méthode qui effectue une opération de mise en forme personnalisée, tel que String.Format(IFormatProvider, String, Object[]) l’exemple fournit une illustration de la mise en forme un nombre comme un numéro de compte à 12 chiffres.

L’exemple suivant illustre comment un IFormatProvider implémentation peut modifier la représentation d’une valeur de date et d’heure. Dans ce cas, une date unique est affichée à l’aide de CultureInfo les objets qui représentent quatre cultures différentes.

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

L’exemple suivant illustre l’utilisation d’une classe qui implémente le IFormatProvider interface et le GetFormat (méthode). La AcctNumberFormat classe convertit un Int64 valeur qui représente un numéro de compte et un numéro de compte à 12 chiffres mis en forme. Son GetFormat méthode retourne une référence à le AcctNumberFormat Si l’instance du formatType paramètre fait référence à une classe qui implémente ICustomFormatter; Sinon, GetFormat renvoie 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 classe qui implémente IFormatProvider peut ensuite être utilisé dans un appel à une mise en forme et l’opération d’analyse. Par exemple, le code suivant appelle la String.Format(IFormatProvider, String, Object[]) méthode permettant de générer une chaîne qui contient un numéro de compte à 12 chiffres mis en forme.

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.

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 1.1
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: