IFormatProvider – rozhraní
TOC
Sbalit obsah
Rozbalit obsah
Tento článek byl přeložený strojově. Pokud chcete zobrazit článek v angličtině, zaškrtněte políčko Angličtina. Anglickou verzi článku můžete také zobrazit v místním okně přesunutím ukazatele myši nad text.
Překlad
Angličtina

IFormatProvider – rozhraní

.NET Framework (current version)
 

Poskytuje mechanismus pro načtení objektu k řízení formátování.

Obor názvů:   System
Sestavení:  mscorlib (v mscorlib.dll)

[ComVisibleAttribute(true)]
public interface IFormatProvider

NázevPopis
System_CAPS_pubmethodGetFormat(Type)

Vrátí objekt, který poskytuje služby formátování u zadaného typu.

IFormatProvider Rozhraní poskytuje objekt, který poskytuje informace o formátování pro formátování a operace analýzy. Operací formátování převést hodnotu typu na řetězcovou reprezentaci této hodnoty. Typické formátování metody jsou ToString metody typu, jakož i Format. Operace analýzy převést na typ s hodnotou, kterou řetězcové vyjádření hodnoty. Typické metody analýzy jsou Parse a TryParse.

IFormatProvider Rozhraní se skládá z jedné metody IFormatProvider.GetFormat. GetFormat je metoda zpětného volání: analýzu nebo formátování metoda volá a předá ji Type objekt, který představuje typ objektu, který formátování nebo analýzy metoda očekává, že bude poskytovat informace o formátování. GetFormat Metoda je zodpovědná za vrácení objektu tohoto typu.

IFormatProvider implementace jsou často používány implicitně formátování a analýza metody. Například DateTime.ToString(String) Metoda implicitně používá IFormatProvider implementace, která představuje aktuální jazykovou verzi systému. IFormatProvider implementace lze také zadat explicitně pomocí metody, které mají parametr typu IFormatProvider, jako je například Int32.Parse(String, IFormatProvider) a String.Format(IFormatProvider, String, Object[]).

Rozhraní .NET Framework zahrnuje následující tři předdefinované IFormatProvider implementace informace specifické pro jazykovou verzi, které se používá v formátování nebo analýzy hodnoty číselné a data a času:

Rozhraní .NET Framework podporuje také vlastní formátování. To obvykle zahrnuje vytvoření formátování třídu, která implementuje oba IFormatProvider a ICustomFormatter. Instance této třídy je pak předán jako parametr metody, která provádí vlastní operace formátování, jako je například String.Format(IFormatProvider, String, Object[]) příklad uvádí ukázku takové vlastní implementaci, formátuje číslo jako účet 12 číslic.

Následující příklad ukazuje, jak IFormatProvider implementace můžete změnit vyjádření hodnoty data a času. V takovém případě je jediné datum zobrazeno pomocí CultureInfo objekty, které představují čtyři různé jazykové verze.

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

Následující příklad ukazuje použití třídy, která implementuje IFormatProvider rozhraní a GetFormat Metoda. AcctNumberFormat Třídy převede Int64 hodnotu, která představuje číslo účtu na číslo účtu formátovaný 12 číslic. Jeho GetFormat Metoda vrátí odkaz na aktuální AcctNumberFormat instance Pokud formatType parametr odkazuje na třídu, která implementuje ICustomFormatterjinak GetFormat vrátí 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;
   }
}

Třída, která implementuje IFormatProvider lze použít při volání k formátování a analýzu operace. Například následující kód volá String.Format(IFormatProvider, String, Object[]) Metoda ke generování řetězec, který obsahuje formátované 12 číslic číslo účtu.

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.

Universal Windows Platform
K dispozici od 4.5
.NET Framework
K dispozici od 1.1
Portable Class Library
Podporováno v: portable .NET platforms
Silverlight
K dispozici od 2.0
Windows Phone Silverlight
K dispozici od 7.0
Windows Phone
K dispozici od 8.1
Zpátky na začátek
Zobrazit:
© 2016 Microsoft