Lire en anglais

Partager via


IFormatProvider Interface

Définition

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

C#
public interface IFormatProvider
C#
[System.Runtime.InteropServices.ComVisible(true)]
public interface IFormatProvider
Dérivé
Attributs

Exemples

L’exemple suivant montre comment une 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 CultureInfo d’objets qui représentent quatre cultures différentes.

C#
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      DateTime dateValue = new DateTime(2009, 6, 1, 16, 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 l’interface IFormatProvider et la GetFormat méthode. La AcctNumberFormat classe convertit une Int64 valeur qui représente un numéro de compte en un numéro de compte mis en forme à 12 chiffres. Sa GetFormat méthode retourne une référence à l’instance actuelle AcctNumberFormat si le formatType paramètre fait référence à une classe qui implémente ICustomFormatter; sinon, GetFormat retourne 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;
   }
}

La classe qui implémente IFormatProvider peut ensuite être utilisée dans un appel à une opération de mise en forme et d’analyse. Par exemple, le code suivant appelle la String.Format(IFormatProvider, String, Object[]) méthode pour générer une chaîne qui contient un numéro de compte à 12 chiffres mis en forme.

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.

Remarques

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

L’interface IFormatProvider se compose d’une seule méthode. IFormatProvider.GetFormat GetFormat est une méthode de rappel : la méthode d’analyse ou de mise en forme l’appelle et la transmet à un Type objet qui représente le type d’objet attendu par la méthode de mise en forme ou d’analyse. La 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 l’analyse des méthodes. Par exemple, la 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 des 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 implémentations prédéfinies IFormatProvider suivantes pour fournir des informations spécifiques à la culture utilisées dans la mise en forme ou l’analyse des valeurs numériques et 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 de mise en forme qui implémente à la fois IFormatProvider et ICustomFormatter. Une instance de cette classe est ensuite passée en tant que paramètre à une méthode qui effectue une opération de mise en forme personnalisée, telle que String.Format(IFormatProvider, String, Object[]) l’exemple fournit une illustration d’une implémentation personnalisée qui met en forme un nombre sous forme de numéro de compte à 12 chiffres.

Méthodes

GetFormat(Type)

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

S’applique à

Produit Versions
.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

Voir aussi