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、执行结果
我的博客主要用来交流,将自己所学、所看到比较好的东西 进行一下深入理解和回顾。