c温故而知新stream篇(三)textwriter和streamwriter
TextWriter 和 StreamWriter 目录: 为何介绍 TextWriter? TextWriter 的构造,常用属性和方法 IatProvider 的简单介绍 如何理解 StreamWriter? StreamWriter 属性 StreamWriter 示例 本章总结 为何介绍 TextWriter? 就像上篇讲述的一样,对于重要的基础技术,我们一定要刨根问底,这样在面对将来可 能很复杂的业务或技术时才能游刃有余, 甚至可以创新出新的解决方案, 言归正传,想了解 StreamWriter 必须了解其父亲 TextWriter 的结构和使用方法。 那么微软为什么要创建立这个抽象类呢?看下图的确可以这样理解 C,C++ ,XAML,Html 一切可以写在文本上写的语言都可以用 Text 这个词在抽象,(千万别小看记事本,它才是元老啊), 聪明的你想到了,今后我们可以自定义一些自己 Writer 类来实现我们特定的写功能。 现在我们只要理解 TextWriter 是一个抽象的文本写入器, 可以在文本上写入我们想要的格式,可以通过微软派生类或着自定义派生类来实现 TextWriter 的功能。 只要你有足够的想象力就能在 创新 出一个新的派生类。TextWriter 的构造,常用属性和方法 以下是 TextWriter 构造函数: 和所有的抽象类一样,该类不能直接实例化,它有 2 个构造函数特别我想说下第二个构造函数,大家发现这个构造有个 IFomatProvider 类型 的参数, 这个是什么东东?IatProvider 接口的简单介绍 其实 IatProvider 接口 从字面上就能理解了,一个格式化的提供者 大家记得我们常用的 string.at(“{0:P}”,data);么? IatProvider 在这里被隐式的调用了 关于隐式调用的各种方式,用个简单的例子向大家说明下://有关数字格式化隐性使用IFomatProvider 的例子 #if true//货币Console.WriteLine(string.at(“显示货币格式{0:c3}“,12));//十进制Console.WriteLine(“显示货币十进制格式{0:d10}“, 12);//科学计数法Console.WriteLine(“科学计数法{0:e5}“,12);//固定点格式Console.WriteLine(“固定点格式 {0:f10}“,12);//常规格式Console.WriteLine(“常规格式{0:g10}“,12);//数字格式( 用分号隔开)Console.WriteLine(“数字格式 {0:n5}:“,666666666);//百分号格式Console.WriteLine(“百分号格式(不保留小数){0:p0}“,0.55);//16 进制Console.WriteLine(“16 进制{0:x0}“, 12);// 0 定位器 此示例保留5 位小数,如果小数部分小于5 位,用0 填充Console.WriteLine(“0 定位器{0:000.00000}“,1222.133);//数字定位器Console.WriteLine(“数字定位器{0:(#).###}“, 0200.0233000);//小数Console.WriteLine(“小数保留一位{0:0.0}“, 12.222);//百分号的另一种写法,注意小数的四舍五入Console.WriteLine(“百分号的另一种写法,注意小数的四舍五入{0:0%.00}“, 0.12 345);Console.WriteLine(“\n\n“);#endif输出结果: 也就是说 IatProvider 提供了一个格式化的工具。 让我们通过 NumberatInfo 类来温故下: 这个密封类实现了 IatProvider 接口,主要实现了一个数字格式化的 类,下面是一些规定的格式说明符: c、C 货币格式。关联的属性包括: d、D 十进制格式。 e、E 科学计数(指数)格式。 f、F 固定点格式。 g、G 常规格式。 n、N 数字格式。 p、P 百分比格式。让我们用简单易懂的代码来实现下 NumberatInfo 如何使用:#if true//显性使用IFomatProviderConsole.WriteLine(“显性使用IFomatProvider 的例子“);//实例化numberFomatProvider 对象NumberatInfo numberFomatProvider = new NumberatInfo();//设置该provider 对于货币小数的显示长度numberFomatProvider.CurrencyDecimalDigits = 10;//注意:我们可以使用C+数字形式来改变provider 提供的格式Console.WriteLine(string.at(numberFomatProvider, “provider 设置 的货币格式{0:C}“, 12));Console.WriteLine(string.at(numberFomatProvider, “provider 设置 的货币格式被更改了:{0:C2}“, 12));Console.WriteLine(string.at(numberFomatProvider, “默认百分号和小 数形式{0:p2}“, 0.12));//将小数 “.” 换成“?“ numberFomatProvider.PercentDecimalSeparator = “?“;Console.WriteLine(string.at(numberFomatProvider, “provider 设置 的百分号和小数形式{0:p2}“, 0.12));Console.ReadLine(); #endif输出结果:正如上述代码所表示的,IatProvider 提供用于检索控制格式化的对象的机 制。我们甚至可以自定义 provider 类来实现特殊的字符串格式化,关于这个重要的知识点我会在另一篇文章中详细介绍 并且自定义一个简单的 atInfo 类