5.重写ToString()方法。

.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:格式符}",自定义类));来对两个方法的结果进行测试。

具体代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Globalization;
  6. namespace ProString
  7. {
  8. class Program
  9. {
  10. staticvoid Main(string[] args)
  11. {
  12. CUnity unit = new CUnity(100);
  13. //使用IFormatProvider,ICustomFormatter
  14. Console.WriteLine(String.Format(new CUnityFormat(),"{0:T}",unit));
  15. //使用IFormattable
  16. Console.WriteLine("{0:T}",unit);
  17. Console.ReadKey();
  18. }
  19. }
  20. class CUnity:IFormattable
  21. {
  22. public Int32 parint;
  23. public CUnity(Int32 par)
  24. {
  25. parint = par;
  26. }
  27. /// <summary>
  28. /// 实现IFormattable接口的ToString方法
  29. /// </summary>
  30. /// <param name="fmt">格式字符串</param>
  31. /// <param name="formatProvider">提供程序</param>
  32. /// <returns></returns>
  33. publicstring ToString(string fmt,IFormatProvider formatProvider)
  34. {
  35. string result=null;
  36. if (!String.IsNullOrEmpty(fmt) && fmt.ToUpper() == "T")
  37. result = "Number:"+ parint.ToString();
  38. return result;
  39. }
  40. }
  41. class CUnityFormat : IFormatProvider,ICustomFormatter
  42. {
  43. /// <summary>
  44. /// 实现IFormatProvider接口的GetFormat方法
  45. /// </summary>
  46. /// <param name="formatType"></param>
  47. /// <returns></returns>
  48. publicobject GetFormat(Type formatType)
  49. {
  50. if (formatType == typeof(ICustomFormatter))
  51. {
  52. returnthis;
  53. }
  54. else
  55. {
  56. returnnull;
  57. }
  58. }
  59. /// <summary>
  60. /// 显示ICustomFormatter接口的Format方法
  61. /// </summary>
  62. /// <param name="fmt">格式化字符串</param>
  63. /// <param name="arg">要格式化的值</param>
  64. /// <param name="formatProvider">提供用于检索控制格式化的对象的机制</param>
  65. /// <returns></returns>
  66. publicstring Format(string fmt,object arg,IFormatProvider formatProvider)
  67. {
  68. string result=null;
  69. if (!this.Equals(formatProvider))
  70. {
  71. returnnull;
  72. }
  73. else
  74. {
  75. if (!String.IsNullOrEmpty(fmt) && fmt.ToUpper() == "T")
  76. result = "CUnity:" + ((CUnity)arg).parint.ToString();
  77. return result;
  78. }
  79. }
  80. }
  81. }
原文地址:https://www.cnblogs.com/movemoon/p/2734008.html