• IFormattable,ICustomFormatter, IFormatProvider接口


    定                 义

    1、IFormattable

       提供一种功能,用以将对象的值格式化为字符串表示形式

    2、IFormatProvider

       提供用于检索控制格式化的对象的机制。

    3、ICustomFormatter

      自定义格式化功能

    原                  理

    1.Format方法的内部解析方式和原理

     a、Format方法在取到参数"I am {0},Today is {1:yyyy-MM-dd}."之后便将其分解成多个部分:① “ I am ” 、 ② "{0}" 、 ③",Today is " 、④"{1:yyyy-MM-dd}、⑤"."分解的原则是按照{}配对的数量进行,{}是微软定义好的标记。

      b、分解完成后在使用 StringBuilder的Append方法将各个部分添加进去,最后再用ToString方法转成string

        var test = new StringBuilder();
                test .Append("I am");
                test .Append(Name);
                test .Append(",Today is ");
                test .Append(DateTime.Now.ToString("yyyy-MM-dd"));
                test .Append(".");

      c、微软源码解析

     

    自 定 义 格 式 风 格

     1、IFormattable自定义格式化

      1.1、实现IFormattable方法,自定义个人风格

      

      1.2、使用方法

      

      为什么这样就能找个我们实现的接口呢,看看执行原理:(微软源码)

       
    到目前为止实现string.format进行格式化基本应该没有什么问题,但是我们必须针对要进行格式化的每个类都要实现IFormattable接口,这样代码的冗余量比较大,个人不是很喜欢,那么有没有办法解决呢??看看下面两个高大尚的接口吧

    2、 IFormatProvider、ICustomFormatter

      2.1、创建一个类实现IFormatProvider(格式化提供者)

       2.2、创建一个类实现ICustomFormatter(自定义格式内容)

      2.3、如何使用

      2.4、执行结果

    我的博客主要用来交流,将自己所学、所看到比较好的东西 进行一下深入理解和回顾。

  • 相关阅读:
    读入输出优化
    【JSOI2008】星球大战 并查集
    堆STL和重载运算符
    树的直径
    H3C三层交换机(S5500)清除配置信息并进行简单配置
    简单的逻辑学
    Java基础--第十八天
    Java基础--第十七天
    Java基础--第十六天
    Java基础--第十五天
  • 原文地址:https://www.cnblogs.com/tx720/p/5964409.html
Copyright © 2020-2023  润新知