.NET Framework提供给我们拓展其内置格式化字符串接口:IFormattable 、ICustomFormatter 、IFormatProvider
本文介绍两个自定义格式字符串的方法:
1、在继承IFormattable接口的自定义类型中实现IFormattable接口的ToString方法
2、在继承ICustomFormatter 和 IFormatProvider 接口的自定义类型中实现 IFormatProvider 接口的GetFormat方法和ICustomFormatter 接口的Format方法。
测试方法:
1、根据方法1和方法2 分别创建两个自定义类:
class CUnity:IFormattable
class CUnityFormat : IFormatProvider,ICustomFormatter
并实现对应接口中的方法
3、在Main函数中使用Console.WriteLine("{0:格式符}",自定义类)和Console.WriteLine(String.Format(IFormatProvider类型,"{0:格式符}",自定义类));来对两个方法的结果进行测试。
具体代码如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Globalization;
- namespace ProString
- {
- class Program
- {
- staticvoid Main(string[] args)
- {
- CUnity unit = new CUnity(100);
- //使用IFormatProvider,ICustomFormatter
- Console.WriteLine(String.Format(new CUnityFormat(),"{0:T}",unit));
- //使用IFormattable
- Console.WriteLine("{0:T}",unit);
- Console.ReadKey();
- }
- }
- class CUnity:IFormattable
- {
- public Int32 parint;
- public CUnity(Int32 par)
- {
- parint = par;
- }
- /// <summary>
- /// 实现IFormattable接口的ToString方法
- /// </summary>
- /// <param name="fmt">格式字符串</param>
- /// <param name="formatProvider">提供程序</param>
- /// <returns></returns>
- publicstring ToString(string fmt,IFormatProvider formatProvider)
- {
- string result=null;
- if (!String.IsNullOrEmpty(fmt) && fmt.ToUpper() == "T")
- result = "Number:"+ parint.ToString();
- return result;
- }
- }
- class CUnityFormat : IFormatProvider,ICustomFormatter
- {
- /// <summary>
- /// 实现IFormatProvider接口的GetFormat方法
- /// </summary>
- /// <param name="formatType"></param>
- /// <returns></returns>
- publicobject GetFormat(Type formatType)
- {
- if (formatType == typeof(ICustomFormatter))
- {
- returnthis;
- }
- else
- {
- returnnull;
- }
- }
- /// <summary>
- /// 显示ICustomFormatter接口的Format方法
- /// </summary>
- /// <param name="fmt">格式化字符串</param>
- /// <param name="arg">要格式化的值</param>
- /// <param name="formatProvider">提供用于检索控制格式化的对象的机制</param>
- /// <returns></returns>
- publicstring Format(string fmt,object arg,IFormatProvider formatProvider)
- {
- string result=null;
- if (!this.Equals(formatProvider))
- {
- returnnull;
- }
- else
- {
- if (!String.IsNullOrEmpty(fmt) && fmt.ToUpper() == "T")
- result = "CUnity:" + ((CUnity)arg).parint.ToString();
- return result;
- }
- }
- }
- }