IFormattable Interfész
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Lehetővé teszi az objektumok értékének sztring-ábrázolássá alakítását.
public interface class IFormattable
public interface IFormattable
[System.Runtime.InteropServices.ComVisible(true)]
public interface IFormattable
type IFormattable = interface
[<System.Runtime.InteropServices.ComVisible(true)>]
type IFormattable = interface
Public Interface IFormattable
- Származtatott
- Attribútumok
Példák
Az alábbi példa egy olyan osztályt Temperature határoz meg, amely implementálja az interfészt IFormattable . Az osztály négy formátumkijelölőt támogat: "G" és "C", amelyek azt jelzik, hogy a hőmérsékletEt Celsiusban kell megjeleníteni; "F", amely azt jelzi, hogy a hőmérsékletet Fahrenheitben kell megjeleníteni; és "K", ami azt jelzi, hogy a hőmérsékletet a Kelvinben kell megjeleníteni. Emellett az IFormattable.ToString implementáció képes kezelni egy üres vagy üres formátumsztringet null is. Az osztály által Temperature definiált másik két ToString metódus egyszerűen becsomagolja a IFormattable.ToString megvalósításra irányuló hívást.
using System;
using System.Globalization;
public class Temperature : IFormattable
{
private decimal temp;
public Temperature(decimal temperature)
{
if (temperature < -273.15m)
throw new ArgumentOutOfRangeException(String.Format("{0} is less than absolute zero.",
temperature));
this.temp = temperature;
}
public decimal Celsius
{
get { return temp; }
}
public decimal Fahrenheit
{
get { return temp * 9 / 5 + 32; }
}
public decimal Kelvin
{
get { return temp + 273.15m; }
}
public override string ToString()
{
return this.ToString("G", CultureInfo.CurrentCulture);
}
public string ToString(string format)
{
return this.ToString(format, CultureInfo.CurrentCulture);
}
public string ToString(string format, IFormatProvider provider)
{
if (String.IsNullOrEmpty(format)) format = "G";
if (provider == null) provider = CultureInfo.CurrentCulture;
switch (format.ToUpperInvariant())
{
case "G":
case "C":
return temp.ToString("F2", provider) + " °C";
case "F":
return Fahrenheit.ToString("F2", provider) + " °F";
case "K":
return Kelvin.ToString("F2", provider) + " K";
default:
throw new FormatException(String.Format("The {0} format string is not supported.", format));
}
}
}
open System
open System.Globalization
type Temperature(temperature: decimal) =
do
if temperature < -273.15M then
raise (ArgumentOutOfRangeException $"{temperature} is less than absolute zero.")
member _.Celsius =
temperature
member _.Fahrenheit =
temperature * 9M / 5M + 32M
member _.Kelvin =
temperature + 273.15m
override this.ToString() =
this.ToString("G", CultureInfo.CurrentCulture)
member this.ToString(format) =
this.ToString(format, CultureInfo.CurrentCulture)
member this.ToString(format, provider: IFormatProvider) =
let format =
if String.IsNullOrEmpty format then "G"
else format
let provider =
if isNull provider then
CultureInfo.CurrentCulture :> IFormatProvider
else provider
match format.ToUpperInvariant() with
| "G" | "C" ->
temperature.ToString("F2", provider) + " °C"
| "F" ->
this.Fahrenheit.ToString("F2", provider) + " °F"
| "K" ->
this.Kelvin.ToString("F2", provider) + " K"
| _ ->
raise (FormatException $"The {format} format string is not supported.")
interface IFormattable with
member this.ToString(format, provider) = this.ToString(format, provider)
Imports System.Globalization
Public Class Temperature : Implements IFormattable
Private temp As Decimal
Public Sub New(temperature As Decimal)
If temperature < -273.15 Then _
Throw New ArgumentOutOfRangeException(String.Format("{0} is less than absolute zero.", _
temperature))
Me.temp = temperature
End Sub
Public ReadOnly Property Celsius As Decimal
Get
Return temp
End Get
End Property
Public ReadOnly Property Fahrenheit As Decimal
Get
Return temp * 9 / 5 + 32
End Get
End Property
Public ReadOnly Property Kelvin As Decimal
Get
Return temp + 273.15d
End Get
End Property
Public Overrides Function ToString() As String
Return Me.ToString("G", CultureInfo.CurrentCulture)
End Function
Public Overloads Function ToString(fmt As String) As String
Return Me.ToString(fmt, CultureInfo.CurrentCulture)
End Function
Public Overloads Function ToString(fmt As String, provider As IFormatProvider) _
As String _
Implements IFormattable.ToString
If String.IsNullOrEmpty(fmt) Then fmt = "G"
If provider Is Nothing Then provider = CultureInfo.CurrentCulture
Select Case fmt.ToUpperInvariant()
Case "G", "C"
Return temp.ToString("F2", provider) + " °C"
Case "F"
Return Fahrenheit.ToString("F2", provider) + " °F"
Case "K"
Return Kelvin.ToString("F2", provider) + " K"
Case Else
Throw New FormatException(String.Format("The {0} format string is not supported.", fmt))
End Select
End Function
End Class
Az alábbi példa ezután közvetlenül vagy összetett formátumú sztring használatával hívja meg az IFormattable.ToString implementációt.
public class Example
{
public static void Main()
{
// Use composite formatting with format string in the format item.
Temperature temp1 = new Temperature(0);
Console.WriteLine("{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)\n", temp1);
// Use composite formatting with a format provider.
temp1 = new Temperature(-40);
Console.WriteLine(String.Format(CultureInfo.CurrentCulture, "{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)", temp1));
Console.WriteLine(String.Format(new CultureInfo("fr-FR"), "{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)\n", temp1));
// Call ToString method with format string.
temp1 = new Temperature(32);
Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)\n",
temp1.ToString("C"), temp1.ToString("K"), temp1.ToString("F"));
// Call ToString with format string and format provider
temp1 = new Temperature(100) ;
NumberFormatInfo current = NumberFormatInfo.CurrentInfo;
CultureInfo nl = new CultureInfo("nl-NL");
Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)",
temp1.ToString("C", current), temp1.ToString("K", current), temp1.ToString("F", current));
Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)",
temp1.ToString("C", nl), temp1.ToString("K", nl), temp1.ToString("F", nl));
}
}
// The example displays the following output:
// 0.00 °C (Celsius) = 273.15 K (Kelvin) = 32.00 °F (Fahrenheit)
//
// -40.00 °C (Celsius) = 233.15 K (Kelvin) = -40.00 °F (Fahrenheit)
// -40,00 °C (Celsius) = 233,15 K (Kelvin) = -40,00 °F (Fahrenheit)
//
// 32.00 °C (Celsius) = 305.15 K (Kelvin) = 89.60 °F (Fahrenheit)
//
// 100.00 °C (Celsius) = 373.15 K (Kelvin) = 212.00 °F (Fahrenheit)
// 100,00 °C (Celsius) = 373,15 K (Kelvin) = 212,00 °F (Fahrenheit)
open System
open System.Globalization
[<EntryPoint>]
let main _ =
// Use composite formatting with format string in the format item.
let temp1 = Temperature 0
Console.WriteLine("{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)\n", temp1)
// Use composite formatting with a format provider.
let temp1 = Temperature -40
String.Format(CultureInfo.CurrentCulture, "{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)", temp1)
|> printfn "%s"
String.Format(CultureInfo "fr-FR", "{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)\n", temp1)
|> printfn "%s"
// Call ToString method with format string.
let temp1 = Temperature 32
Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)\n",
temp1.ToString "C", temp1.ToString "K", temp1.ToString "F")
// Call ToString with format string and format provider
let temp1 = Temperature 100
let current = NumberFormatInfo.CurrentInfo
let nl = CultureInfo "nl-NL"
Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)",
temp1.ToString("C", current), temp1.ToString("K", current), temp1.ToString("F", current))
Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)",
temp1.ToString("C", nl), temp1.ToString("K", nl), temp1.ToString("F", nl))
0
// The example displays the following output:
// 0.00 °C (Celsius) = 273.15 K (Kelvin) = 32.00 °F (Fahrenheit)
//
// -40.00 °C (Celsius) = 233.15 K (Kelvin) = -40.00 °F (Fahrenheit)
// -40,00 °C (Celsius) = 233,15 K (Kelvin) = -40,00 °F (Fahrenheit)
//
// 32.00 °C (Celsius) = 305.15 K (Kelvin) = 89.60 °F (Fahrenheit)
//
// 100.00 °C (Celsius) = 373.15 K (Kelvin) = 212.00 °F (Fahrenheit)
// 100,00 °C (Celsius) = 373,15 K (Kelvin) = 212,00 °F (Fahrenheit)
Module Example
Public Sub Main()
' Use composite formatting with format string in the format item.
Dim temp1 As New Temperature(0)
Console.WriteLine("{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)", temp1)
Console.WriteLine()
' Use composite formatting with a format provider.
temp1 = New Temperature(-40)
Console.WriteLine(String.Format(CultureInfo.CurrentCulture, "{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)", temp1))
Console.WriteLine(String.Format(New CultureInfo("fr-FR"), "{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)", temp1))
Console.WriteLine()
' Call ToString method with format string.
temp1 = New Temperature(32)
Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)", _
temp1.ToString("C"), temp1.ToString("K"), temp1.ToString("F"))
Console.WriteLine()
' Call ToString with format string and format provider
temp1 = New Temperature(100)
Dim current As NumberFormatInfo = NumberFormatInfo.CurrentInfo
Dim nl As New CultureInfo("nl-NL")
Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)", _
temp1.ToString("C", current), temp1.ToString("K", current), temp1.ToString("F", current))
Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)", _
temp1.ToString("C", nl), temp1.ToString("K", nl), temp1.ToString("F", nl))
End Sub
End Module
' The example displays the following output:
' 0.00 °C (Celsius) = 273.15 K (Kelvin) = 32.00 °F (Fahrenheit)
'
' -40.00 °C (Celsius) = 233.15 K (Kelvin) = -40.00 °F (Fahrenheit)
' -40,00 °C (Celsius) = 233,15 K (Kelvin) = -40,00 °F (Fahrenheit)
'
' 32.00 °C (Celsius) = 305.15 K (Kelvin) = 89.60 °F (Fahrenheit)
'
' 100.00 °C (Celsius) = 373.15 K (Kelvin) = 212.00 °F (Fahrenheit)
' 100,00 °C (Celsius) = 373,15 K (Kelvin) = 212,00 °F (Fahrenheit)
Megjegyzések
Az IFormattable interfész egy objektumot formázó sztring és egy formátumszolgáltató alapján konvertálja az objektumot a sztringre.
A formátumsztring általában egy objektum általános megjelenését határozza meg. A .NET-keretrendszer például a következőket támogatja:
Szabványos formázási sztringek az enumerálási értékek formázásához (lásd : Enumerálási formázási sztringek).
Numerikus értékek formázására szolgáló standard és egyéni formázási sztringek (lásd : Standard numerikus formázási sztringek és egyéni numerikus formázási sztringek).
Standard és egyéni formázási sztringek a dátum- és időértékek formázásához (lásd : Standard dátum- és időformátum sztringek és egyéni dátum- és időformátum sztringek).
Standard és egyéni formázási sztringek az időintervallumok formázásához (lásd : Standard TimeSpan Format Strings and Custom TimeSpan Format Strings).
Saját formátumsztringeket is definiálhat az alkalmazás által definiált típusok formázásának támogatásához.
A formátumszolgáltató egy formázási objektumot ad vissza, amely általában meghatározza az objektumok sztringre való konvertálásához használt szimbólumokat. Ha például egy számot pénznemértékké konvertál, a formátumszolgáltató határozza meg az eredménysztringben megjelenő pénznemszimbólumot. .NET Keretrendszer három formátumszolgáltatót határoz meg:
Az System.Globalization.CultureInfo osztály, amely egy NumberFormatInfo objektumot ad vissza a numerikus értékek formázásához, vagy egy DateTimeFormatInfo objektumot a dátum- és időértékek formázásához.
Az System.Globalization.NumberFormatInfo osztály, amely egy példányt ad vissza a numerikus értékek formázásához.
Az System.Globalization.DateTimeFormatInfo osztály, amely egy példányt ad vissza a dátum- és időértékek formázásához.
Emellett saját egyéni formátumszolgáltatókat is meghatározhat a formázáshoz használt kultúraspecifikus, szakmaspecifikus vagy iparágspecifikus információk megadásához. Az egyéni formázás egyéni formátumszolgáltatóval történő implementálásával kapcsolatos további információkért lásd: ICustomFormatter.
Az IFormattable interfész egyetlen metódust határoz meg, ToStringamely formázási szolgáltatásokat biztosít a implementálási típushoz. A ToString metódus hívható közvetlenül. Emellett a Convert.ToString(Object) és Convert.ToString(Object, IFormatProvider) metódusok, valamint a composite formázási funkciót használó metódusok is meghívják a .NET-keretrendszerben. Ilyen módszerek többek között a Console.WriteLine(String, Object)következőkStringBuilder.AppendFormat(String, Object)String.Format: A ToString metódus a metódus formátumsztringjének minden egyes formázási eleméhez meghívódik.
Az IFormattable interfészt az alapadattípusok implementálják.
Megjegyzések az implementálókhoz
Azok az osztályok, amelyek a megadottnál ToString() nagyobb mértékben szabályozják a sztringek formázását, implementálniuk IFormattablekell.
A implementálandó osztálynak IFormattable támogatnia kell a "G" (általános) formátumkijelölőt. A "G" kijelölő mellett az osztály definiálhatja az általa támogatott formátumjelölők listáját. Emellett az osztálynak fel kell készülnie egy formátumjelölő kezelésére, amely az null. További információ a formázásról és a formázási kódokról: Formázástípusok
Metódusok
| Name | Description |
|---|---|
| ToString(String, IFormatProvider) |
Formázza az aktuális példány értékét a megadott formátummal. |