Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

IFormatProvider.GetFormat-Methode: (Type)

 

Veröffentlicht: Oktober 2016

Gibt ein Objekt, das Formatierungsdienste für den angegebenen Typ bereitstellt.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

object GetFormat(
	Type formatType
)

Parameter

formatType
Type: System.Type

Ein Objekt, das den Typ des zurückzugebenden Formatierungsobjekts angibt.

Rückgabewert

Type: System.Object

Eine Instanz des angegebenen Objekts formatType, wenn die IFormatProvider Implementierung Objekttyp bereitstellen kann, andernfalls null.

GetFormat ist eine Rückrufmethode, die Formatierung und Analyse von Methoden zum Abrufen von Informationen über das Format der Eingabezeichenfolge beim Analysieren von Vorgängen oder das Format der Ausgabezeichenfolge bei Formatierungsvorgängen aufrufen. In der formatType -Parameter, die Formatierung oder Analysieren der Methode übergibt den Typ des Objekts, die erforderlich sind, damit den Vorgang ausgeführt werden. Wenn die IFormatProvider Implementierung angeben das Formatieren oder Analysieren von Objekt wird dieses Objekt zurückgegeben. Wenn nicht, es gibt null.

Z. B. im Aufruf der Int32.ToString(IFormatProvider) -Methode, um das Methodenargument ist ein IFormatProvider -Objekt, das enthält Informationen wie die Zeichenfolgendarstellung der aktuellen Instanz der Ganzzahl formatiert werden kann. Wenn die Laufzeit die Methode ausgeführt wird, ruft er die IFormatProvider des Objekts GetFormat Methode und übergibt sie ein Type Objekt, das darstellt der NumberFormatInfo Typ. Wenn die IFormatProvider Objekt bereitstellen kann ein NumberFormatInfo -Objekt, wird das Objekt zurückgegeben. Wenn ein Objekt dieses Typs angegeben werden kann, gibt es null.

Implementieren der IFormatProvider Schnittstelle und die GetFormat -Methode in Klassen, die benutzerdefinierte Formatierung oder Analyse Services bereitstellen. Die IFormatProvider Implementierung wird dann als Argument an eine Überladung der Analyse- bzw. Formatierungsmethode, die einen Parameter vom Typ übergeben IFormatProvider, wie z. B. String.Format(IFormatProvider, String, Object[]), Int32.ToString(String, IFormatProvider), oder DateTime.Parse(String, IFormatProvider).

Das folgende Beispiel veranschaulicht die Verwendung einer Klasse, die implementiert die IFormatProvider Schnittstelle und die GetFormat Methode. Die AcctNumberFormat -Klasse konvertiert einen Int64 -Wert, der eine Kontonummer, um eine formatierte Kontonummer mit 12 Ziffern darstellt. Die GetFormat -Methode gibt einen Verweis auf sich selbst zurück, wenn die formatType -Parameter verweist auf eine Klasse, die implementiert ICustomFormatterandernfalls GetFormat gibt 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;
   }
}

Eine Instanz der AcctNumberFormat Klasse kann dann als Argument übergeben werden, um eine Methode, formatieren oder analysieren Dienste bereitstellt. Im folgenden code wird beispielsweise übergibt eine AcctNumberFormat Klasse, um die String.Format(IFormatProvider, String, Object[]) Methode, um eine formatierte Kontonummer mit 12 Ziffern zu generieren.

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.

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: