Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Interfaccia IFormattable

 

Data di pubblicazione: ottobre 2016

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

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

[ComVisibleAttribute(true)]
public interface IFormattable

NomeDescrizione
System_CAPS_pubmethodToString(String, IFormatProvider)

Formatta il valore dell'istanza corrente usando il formato specificato.

Il IFormattable interfaccia converte un oggetto nella relativa rappresentazione di stringa in base a una stringa di formato e un provider di formato.

In genere, una stringa di formato definisce l'aspetto generale di un oggetto. Ad esempio, .NET Framework supporta le operazioni seguenti:

È inoltre possibile definire stringhe di formato per supportare la formattazione dei tipi 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 di stringa. Ad esempio, quando si converte un numero in un valore di valuta, un provider di formato definisce il simbolo di valuta che viene visualizzato nella stringa di risultato. .NET Framework definisce tre provider di formato:

Inoltre, è possibile definire i propri provider di formato personalizzata per fornire specifiche delle impostazioni cultura, professione specifici, o informazioni specifiche del settore utilizzato per la formattazione. Per ulteriori informazioni sull'implementazione di formattazione personalizzata mediante un provider di formato personalizzato, vedere ICustomFormatter.

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

Il IFormattable interfaccia viene implementata dai tipi di dati di base.

Note per gli implementatori:

Le classi che richiedono un maggiore controllo sulla formattazione delle stringhe di Object.ToString fornisce deve implementare IFormattable.

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

Nell'esempio seguente viene definita una classe Temperature che implementa l'interfaccia IFormattable. La classe supporta quattro identificatori di formato: "G" e "C", a indicare che la temperatura deve essere visualizzato in Celsius; "F", che indica che la temperatura deve essere visualizzato in gradi Fahrenheit; e "K", che indica che la temperatura deve essere visualizzato in Kelvin. Inoltre, il IFormattable.ToString implementazione possa gestire anche una stringa di formato null o vuoto. Gli altri due ToString metodi definiti dalla Temperature classe eseguire semplicemente il wrapping di una chiamata al IFormattable.ToString implementazione.

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 viene chiamato il IFormattable.ToString implementazione direttamente o tramite una stringa di formato composita.

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)

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: