• 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. }
  • 相关阅读:
    js中for循环点击事件(闭包)
    浏览器缩放,会导致布局打乱,解决方法?/一缩小网页布局就打乱了怎么办?
    新手如何理解JS面向对象开发?
    PHP超全局变量$_SERVER
    个人网站(sysoft.net.cn)被k,公司名都搜索不出来了,怎么办?
    松软带你学开发-SQLSELECTDISTINCT语句
    Tomcat内存监控及调优
    JAVA概述 也许你会豁然开朗
    Java programming problems
    Summary of Java basics review data
  • 原文地址:https://www.cnblogs.com/movemoon/p/2734008.html
Copyright © 2020-2023  润新知