Esporta (0) Stampa
Espandi tutto

Metodo IFormatProvider.GetFormat

Aggiornamento: novembre 2007

Restituisce un oggetto che fornisce servizi di formattazione per il tipo specificato.

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

Object GetFormat(
	Type formatType
)
Object GetFormat(
	Type formatType
)
function GetFormat(
	formatType : Type
) : Object

Parametri

formatType
Tipo: System.Type
Oggetto in cui si specifica il tipo di oggetto Format da restituire.

Valore restituito

Tipo: System.Object
Istanza dell'oggetto specificato da formatType, se l'implementazione di IFormatProvider è in grado di fornire quel tipo di oggetto; in caso contrario, null.

GetFormat è un metodo di callback che viene richiamato dai metodi di formattazione e analisi per recuperare informazioni sul formato della stringa di input in operazioni di analisi o sul formato della stringa di output in operazioni di formattazione. Nel parametro formatType, il metodo di formattazione o analisi passa il tipo di oggetto di cui necessita per eseguire l'operazione. Se l'implementazione di IFormatProvider può fornire questo oggetto di formattazione o analisi, restituisce l'oggetto. In caso contrario, restituisce null.

Ad esempio, nella chiamata al metodo Int32.ToString(IFormatProvider), l'argomento del metodo è un oggetto IFormatProvider che fornisce informazioni sul modo in cui la rappresentazione di stringa dell'istanza Integer corrente può essere formattata. Quando il codice runtime esegue il metodo, chiama il metodo GetFormat dell'oggetto IFormatProvider e lo passa a un oggetto Type che rappresenta il tipo NumberFormatInfo. Se l'oggetto IFormatProvider è in grado di fornire un oggetto NumberFormatInfo, restituisce quell'oggetto. Se non può fornire un oggetto di quel tipo, restituisce null.

È possibile implementare l'interfaccia IFormatProvider e il metodo GetFormat in classi che forniscono servizi di formattazione o analisi personalizzati. L'implementazione di IFormatProvider viene quindi passata come argomento a qualsiasi overload di un metodo di analisi o formattazione avente un parametro di tipo IFormatProvider, quale String.Format(IFormatProvider, String, Object[]), Int32.ToString(String, IFormatProvider) o DateTime.Parse(String, IFormatProvider).

Nell'esempio seguente viene illustrato l'utilizzo di una classe che implementa l'interfaccia IFormatProvider e il metodo GetFormat. La classe AcctNumberFormat converte un valore Int64 che rappresenta un numero account in un numero account a 12 cifre formattato. Il metodo GetFormat restituisce un riferimento a se stesso se il parametro formatType fa riferimento a una classe che implementa ICustomFormatter; in caso contrario, GetFormat restituisce 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) 
   {
      // 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;
   }   
}


Un'istanza della classe AcctNumberFormat può quindi essere passata come argomento a un metodo che fornisce servizi di formattazione o analisi. Ad esempio, il codice seguente passa una classe AcctNumberFormat al metodo String.Format(IFormatProvider, String, Object[]) per generare un numero account a 12 cifre formattato.

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 per Smartphone, Windows Mobile per Pocket PC, Xbox 360

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

.NET Framework

Supportato in: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Supportato in: 3.5, 2.0, 1.0

XNA Framework

Supportato in: 2.0, 1.0

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft