Csharp/CSharp Tutorial/Class/ICustomFormatter — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Текущая версия на 12:16, 26 мая 2010
ICustomFormatter IFormatProvider
/*
Quote from
Accelerated C# 2005
# By Trey Nash
# ISBN: 1-59059-717-6
# 432 pp.
# Published: Aug 2006
*/
using System;
using System.Text;
using System.Globalization;
public class ComplexDbgFormatter : ICustomFormatter, IFormatProvider
{
public object GetFormat( Type formatType ) {
if( formatType == typeof(ICustomFormatter) ) {
return this;
} else {
return CultureInfo.CurrentCulture.
GetFormat( formatType );
}
}
public string Format( string format, object arg, IFormatProvider formatProvider ) {
if( arg.GetType() == typeof(Complex) && format == "DBG" ) {
Complex cpx = (Complex) arg;
StringBuilder sb = new StringBuilder();
sb.Append( arg.GetType().ToString() + " " );
sb.AppendFormat( "Real:{0} ", cpx.Real );
sb.AppendFormat( "Img: {0} ", cpx.Img );
return sb.ToString();
} else {
IFormattable formatable = arg as IFormattable;
if( formatable != null ) {
return formatable.ToString( format, formatProvider );
} else {
return arg.ToString();
}
}
}
}
public struct Complex : IFormattable
{
public Complex( double Real, double Img ) {
this.Real = Real;
this.Img = Img;
}
public string ToString( string format, IFormatProvider formatProvider ) {
StringBuilder sb = new StringBuilder();
sb.Append( "( " + Real.ToString(format, formatProvider) );
sb.Append( " : " + Img.ToString(format, formatProvider) );
sb.Append( " )" );
return sb.ToString();
}
public double Real;
public double Img;
}
public class MainClass
{
static void Main() {
CultureInfo local = CultureInfo.CurrentCulture;
CultureInfo germany = new CultureInfo( "de-DE" );
Complex cpx = new Complex( 12.3456, 1234.56 );
string strCpx = cpx.ToString( "F", local );
Console.WriteLine( strCpx );
strCpx = cpx.ToString( "F", germany );
Console.WriteLine( strCpx );
ComplexDbgFormatter dbgFormatter = new ComplexDbgFormatter();
strCpx = String.Format( dbgFormatter,"{0:DBG}", cpx );
Console.WriteLine( "\nDebugging output:\n{0}", strCpx );
}
}
( 12.35 : 1234.56 ) ( 12,35 : 1234,56 ) Debugging output: Complex Real:12.3456 Img: 1234.56