Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Interfaccia IFormattable

Fornisce la funzionalità per formattare il valore di un oggetto in una rappresentazione in formato di stringa.

Spazio dei nomi:  System
Assembly:  mscorlib (in mscorlib.dll)

[ComVisibleAttribute(true)]
public interface IFormattable

Il tipo IFormattable espone i seguenti membri.

  NomeDescrizione
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreToStringFormatta il valore dell'istanza corrente utilizzando il formato specificato.
In alto

L'interfaccia IFormattable converte un oggetto nella relativa rappresentazione in forma di stringa basata su una stringa di formato e un provider di formato.

Una stringa di formato tipicamente definisce l'aspetto generale di un oggetto. Ad esempio .NET Framework supporta quanto segue:

È inoltre possibile definire stringhe di formato personalizzate per supportare la formattazione di tipi di dati definiti dall'applicazione.

Un provider di formato restituisce un oggetto di formattazione che in genere definisce i simboli utilizzati nella conversione di un oggetto nella relativa rappresentazione in forma di stringa. Ad esempio, quando si converte un numero in un valore di valuta, un provider di formato definisce il simbolo di valuta visualizzato nella stringa risultante. .NET Framework definisce tre provider di formato:

Inoltre, è possibile definire provider di formato personalizzati per fornire informazioni specifiche delle impostazioni cultura o specifiche del settore professionale o industriale utilizzate nella formattazione. Per ulteriori informazioni sull'implementazione di formattazioni personalizzate tramite provider di formato personalizzati, vedere ICustomFormatter.

L'interfaccia IFormattable definisce un solo metodo, ToStringche fornisce servizi di formattazione per il tipo di implementazione. Il metodo ToString può essere chiamato direttamente. Inoltre, il metodo viene chiamato automaticamente dai metodi Convert.ToString(Object) e Convert.ToString(Object, IFormatProvider) e dai metodi che utilizzano la funzionalità di formattazione composta di .NET Framework. Tali metodi includono, tra gli altri, Console.WriteLine(String, Object), String.Format e StringBuilder.AppendFormat(String, Object). Il metodo ToString viene chiamato per ogni elemento di formato nella stringa di formato del metodo.

L'interfaccia IFormattable è implementata dai tipi di base dei dati.

Note per gli implementatori

Le classi che richiedono un maggiore controllo sulla formattazione di stringhe di quanto possibile con Object.ToString, devono implementare IFormattable.

Una classe che implementa IFormattable deve supportare l'identificatore di formato "G" (generale). Oltre all'identificatore "G", la classe può definire l'elenco degli identificatori di formato supportati. Inoltre, è necessario preparare la classe per gestire un identificatore di formato null. Per ulteriori informazioni sulla formattazione e sui codici di formattazione, vedere Formattazione dei tipi di dati

Nell'esempio seguente viene definita una classe Temperature che implementa l'interfaccia IFormattable. La classe supporta quattro identificatori di formato: "G" e "C", per indicare che la temperatura deve essere visualizzata in gradi Celsius, "F", per indicare che la temperatura deve essere visualizzata in gradi Fahrenheit, e "K" per indicare che la temperatura deve essere visualizzata in gradi Kelvin. Inoltre, l'implementazione di IFormattable.ToString è in grado di gestire anche una stringa di formato che sia null o una stringa vuota. Gli altri due metodi ToString definiti dalla classe Temperature eseguono semplicemente il wrapping di una chiamata all'implementazione IFormattable.ToString.


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));
      }
   }
}


Nell'esempio seguente l'implementazione IFormattable.ToString viene chiamata sia direttamente sia tramite una stringa di formato composta.


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)


.NET Framework

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Libreria di classi portabile

Supportato in: Libreria di classi portabile

.NET per applicazioni Windows Store

Supportato in: Windows 8

.NET per applicazioni Windows Phone

Supportato in: 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 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2015 Microsoft