Byla tato stránka užitečná?
Váš názor na tento obsah je důležitý. Sdělte nám, co si myslíte.
Další podněty?
Zbývající počet znaků: 1500
IFormatProvider – rozhraní
Collapse the table of content
Expand the table of content
Tento článek byl přeložen strojově počítačem. Původní text zobrazíte přesunutím ukazatele myši nad jednotlivé věty článku. Další informace
Překlad
Originál

IFormatProvider – rozhraní

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

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

[ComVisibleAttribute(true)]
public interface IFormatProvider

Typ IFormatProvider zveřejňuje následující členy.

  NázevPopis
Veřejná metodaPodporováno rozhraním XNA FrameworkPodporováno rozhraním Knihovny přenosných třídPodporováno v: .NET pro aplikace pro Windows StoreGetFormatVrátí objekt, který poskytuje služby formátování zadaného typu.
Nahoru

IFormatProvider Rozhraní poskytuje objekt, který poskytuje informace o formátování pro formátování a analýza operací. Hodnota typu operací formátování převést řetězcové vyjádření hodnotu. Typické metody formátování jsou ToString metody typu, jakož i Format. Analýzy operace převést řetězcové vyjádření hodnotu typu s touto hodnotou. Typické metody analýzy jsou Parse a TryParse.

IFormatProvider Rozhraní obsahuje jedinou metodu, IFormatProvider.GetFormat. GetFormat je metoda zpětného volání: analýzy nebo formátování metodu ji zavolá a předá jej Type objekt, který představuje typ objektu, který formátování nebo analýza 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 metod. Například DateTime.ToString(String) metoda implicitně používá IFormatProvider implementace, která představuje aktuální jazykovou verzi systému. IFormatProvider implementace lze také určit explicitně pomocí metody, které mají parametr typu IFormatProvider, jako 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á při formátování nebo analýza hodnoty číselné a datum a čas:

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

Následující příklad ukazuje jak IFormatProvider provedení lze změnit vyjádření hodnoty data a času. V tomto případě je jediné datum zobrazené pomocí CultureInfo objekty, které představují čtyři různé kultury.


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 metody. AcctNumberFormat Třídy převede Int64 hodnotu, která představuje číslo účtu na číslo formátované dvanáctimístný účtu. Jeho GetFormat metoda vrátí odkaz na aktuální AcctNumberFormat instance Pokud formatType parametr odkazuje na třídu, která implementuje ICustomFormatter; jinak 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í formátování a analýza operací. Například následující kód volá String.Format(IFormatProvider, String, Object[]) metoda Generovat řetězec, který obsahuje číslo formátované dvanáctimístný úč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.


.NET Framework

Podporováno v: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Podporováno v: 4, 3.5 SP1

Knihovny přenosných tříd

Podporováno v: Knihovny přenosných tříd

.NET pro aplikace pro Windows Store

Podporováno v: Windows 8

.NET pro aplikace pro Windows Phone

Podporováno v: 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 (role Server Core není podporována), Windows Server 2008 R2 (role Server Core je podporována s aktualizací SP1 nebo novější, architektura Itanium není podporována)

.NET Framework nepodporuje některé verze platforem. Seznam podporovaných verzí naleznete v tématu .NET – požadavky na systém.

Obsah vytvořený komunitou

Přidat
Zobrazit:
© 2015 Microsoft