IFormatProvider-Schnittstelle
Aktualisiert: November 2007
Stellt einen Mechanismus für das Abrufen eines Objekts zur Steuerung der Formatierung bereit.
Assembly: mscorlib (in mscorlib.dll)
Mit Formatierungsmethoden wird der Wert eines Typs in die Zeichenfolgendarstellung dieses Werts konvertiert. Mit Analysemethoden wird die Zeichenfolgendarstellung eines Werts in einen Typ mit diesem Wert konvertiert. Bei Typen, die die IFormatProvider-Schnittstelle implementieren, verwenden diese Methoden die GetFormat-Methode, um ein Objekt abzurufen, das Informationen für die Formatierung oder Analyse bereitstellt. Die IFormatProvider-Schnittstelle legt keine Anforderungen oder Beschränkungen für die bereitgestellten Informationen fest.
In der Regel stellt ein Typ, der die IFormatProvider-Schnittstelle implementiert, kulturspezifische Informationen zur Verfügung. Zum Beispiel wird die IFormatProvider-Schnittstelle von den Klassen NumberFormatInfo, DateTimeFormatInfo und CultureInfo implementiert. Die NumberFormatInfo-Klasse stellt Informationen zum Formatieren von Zahlen bereit, z. B. Währungssymbole oder Tausender- und Dezimaltrennzeichen für eine bestimmte Kultur. Die DateTimeFormatInfo-Klasse stellt Informationen zum Formatieren von Datums- und Zeitangaben bereit, z. B. die Trennzeichen für Datums- und Zeitangaben für eine bestimmte Kultur. Die CultureInfo-Klasse stellt sowohl ein NumberFormatInfo-Objekt als auch ein DateTimeFormatInfo-Objekt für eine bestimmte Kultur bereit.
IFormatProvider-Implementierungen werden i. d. R. als Parameter an Methoden übergeben, die benutzerdefinierte Formatierungs- und Analysevorgänge ausführen. Zu den Methoden, die benutzerdefinierte Formatierungsoperationen ausführen, zählen String.Format(IFormatProvider, String, Object[]) und eine Reihe von ToString-Instanzmethoden. Zu den Methoden, die benutzerdefinierte Analysevorgänge ausführen, zählen die Parse-Methode und die TryParse-Methode für Datums-, Zeit- und numerische Typen.
Das folgende Codebeispiel veranschaulicht die Verwendung einer Klasse, die die IFormatProvider-Schnittstelle und die GetFormat-Methode implementiert. Die AcctNumberFormat-Klasse konvertiert einen Int64-Wert, der eine Kontonummer darstellt, in eine formatierte Kontonummer mit 12 Ziffern. Die zugehörige GetFormat-Methode gibt einen Verweise auf die aktuelle AcctNumberFormat-Instanz zurück, wenn der formatType-Parameter auf eine Klasse verweist, die ICustomFormatter implementiert, andernfalls gibt GetFormatnull zurück.
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) { // 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); // Add hyphens for formatting code "H" if (! String.IsNullOrEmpty(fmt) && fmt.ToUpper() == "H") return result.Substring(0, 5) + "-" + result.Substring(5, 3) + "-" + result.Substring(8); // Return string representation of argument for any other formatting code else return result; } }
Die Klasse, die IFormatProvider implementiert, kann anschließend in einem Aufruf eines Formatierungs- und Analysevorgangs verwendet werden. Im folgenden Code wird beispielsweise die String.Format(IFormatProvider, String, Object[])-Methode aufgerufen, um eine Zeichenfolge zu generieren, die eine formatierte Kontonummer mit 12 Ziffern enthält.
public class TestFormatting { public static void Main() { long acctNumber; acctNumber = 104254567890; Console.WriteLine(String.Format(new AcctNumberFormat(), "{0:H}", acctNumber)); Console.WriteLine(String.Format(new AcctNumberFormat(), "{0}", acctNumber)); acctNumber = 14567890; Console.WriteLine(String.Format(new AcctNumberFormat(), "{0:H}", acctNumber)); Console.WriteLine(String.Format(new AcctNumberFormat(), "{0}", acctNumber)); acctNumber = 18779887654111; Console.WriteLine(String.Format(new AcctNumberFormat(), "{0:H}", acctNumber)); Console.WriteLine(String.Format(new AcctNumberFormat(), "{0}", acctNumber)); } } // The example displays the following output to the console: // 10425-456-7890 // 104254567890 // 00001-456-7890 // 000014567890 // 18779-887-6541 // 187798876541
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile für Smartphone, Windows Mobile für Pocket PC, Xbox 360
.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.