今天在输出一个Console.WriteLine("{0:A}",item)中怎么也输不出书中的结果,其中A是自定义的格式,item是一个普通的类。至于为什么输错后面再讲。
然后随即想Console.WriteLine()是怎么输出结果,它在后台是调用什么方法的?这些看似越开始学的东西好像越难。
1.查看System.Console类的WriteLine方法
用Reflector软件查看mscorlib组件,查下面的Console类,代码如下:
2.看代码中的Out,它其实是System.IO命名空间下的TextWriter类
然后再调用这个类下的WriteLine方法,具体代码如下:
然后再转到了String类下的string.Format方法,代码如下:
原来建立字符串的过程,需要StringBuilder实例,实例刚开始是用字符串的第一部分初始化,然后调用StringBuilder.AppendFormat()方法,传递到第一个格式说明符{0:A}和相应的对象item。这个方法需要指出如何格式化对象,它首先检查对象,确定它是否执行System命名空间中的借口IFormattable(其实错误就是接口继承错了)。若没有,这个方法只会调用对象的ToString()方法。若后面还有其他的字符串,继续循环StringBuilder.AppendFormat()方法。