当前位置: 首页 > news >正文

海口网约车驾驶员资格证怎么办理/seo推广费用

海口网约车驾驶员资格证怎么办理,seo推广费用,网页界面设计中一般使用的分辨率显示密度是多少,心理软件定制开发为何介绍TextWriter? 就像上篇讲述的一样,对于重要的基础技术,一定要刨根问底,这样在面对将来可能很复杂的业务或技术时才能游刃有余,甚至可以创新出新的解决方案,言归正传,想了解StreamWriter 必须了解其…

为何介绍TextWriter?

       就像上篇讲述的一样,对于重要的基础技术,一定要刨根问底,这样在面对将来可能很复杂的业务或技术时才能游刃有余,甚至可以创新出新的解决方案,言归正传,想了解StreamWriter 必须了解其父亲TextWriter的结构和使用方法。

       那么微软为什么要创建立这个抽象类呢?看下图

image

       的确可以这样理解C,C++ ,XAML,Html一切可以写在文本上写的语言都可以用Text这个词在抽象,(千万别小看记事本,它才是元老)。

       今后我们可以自定义一些自己Writer类来实现我们特定的写功能。现在我们只要理解TextWriter是一个抽象的文本写入器,可以在文本上写入我们想要的格式,可以通过微软派生类或着自定义派生类来实现TextWriter的功能。只要你有足够的想象力就能在创新出一个新的派生类。

 

TextWriter 的构造方法

       和所有的抽象类一样,该类不能直接实例化,它有2个构造函数。

image

       特别说下第二个构造函数,这个构造有个IFomatProvider 类型的参数, 这个是什么东东?

 

IFormatProvider 接口

       其实IFormatProvider接口从字面上就能理解了,一个格式化的提供者。还记得常用的string.format(“{0:P}”,data)么? IFormatProvider 在这里被隐式的调用了。关于隐式调用的各种方式,用个简单的例子向大家说明下:

Console.WriteLine(string.Format("显示货币格式{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);
Console.WriteLine("16进制{0:x0}", 12);
// 保留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.12345);

image

 

我们通过NumberFormatInfo类来温故下:

image

这个密封类实现了IFormatProvider接口,主要实现了一个数字格式化的类。让我们用简单易懂的代码来实现下NumberFormatInfo 如何使用:

Console.WriteLine("显性使用IFomatProvider的例子");
NumberFormatInfo numberFomatProvider = new NumberFormatInfo();
 
// 设置该provider对于货币小数的显示长度
numberFomatProvider.CurrencyDecimalDigits = 10;
 
// 注意:我们可以使用C+数字形式来改变provider提供的格式
Console.WriteLine(string.Format(numberFomatProvider, "provider设置的货币格式{0:C}", 12));
Console.WriteLine(string.Format(numberFomatProvider, "provider设置的货币格式被更改了:{0:C2}", 12));
Console.WriteLine(string.Format(numberFomatProvider, "默认百分号和小数形式{0:p2}", 0.12));
 
// 将小数 “.”换成"?" 
numberFomatProvider.PercentDecimalSeparator = "?";
Console.WriteLine(string.Format(numberFomatProvider, "provider设置的百分号和小数形式{0:p2}", 0.12));
Console.ReadLine(); 

image

       正如上述代码所表示的,IFormatProvider提供用于检索控制格式化的对象的机制。我们甚至可以自定义provider类来实现特殊的字符串格式化。

 

TextWriter 的重要属性和方法

*1:Encoding: 可以获得当前TextWriter的Encoding

*2:FormatProvider: 可以获得当前TextWriter的IFormatProvider

*3:NewLine: 每当调用WriteLine()方法时,行结束符字符串都会写入到文本流中,该属性就是读取该结束符字符串。

*1:Close():关闭TextWriter并且释放TextWriter的资源

*2:Dispose(): 释放TextWriter所占有的所有资源(和StreamReader相似,一旦TextWriter被释放,它所占有的资源例如Stream会一并释放)

*3:Flush(): 和Stream类中一样,将缓冲区所有数据立刻写入文件(基础设备)

*4:Write()方法的重载(这个方法重载太多了,所以这里就不全写出了,大家可以参考最后一个例子的打印结果)

*5:WriteLine()方法的重载:和Write()方法相比区别在于每个重载执行完毕之后会附加写入一个换行符

 

如何理解 StreamWriter ?

       首先我们先了解下StreamWriter的概念:实现一个 TextWriter,使其以一种特定的编码向流中写入字符。

       有很多朋友会疑惑,StreamWriter 和TextWriter 有什么区别?

       其实从名字定义我们便可区分了,TextWriter 分别是对连续字符系列处理的编写器,而 StreamWriter 是通过特定的编码和流的方式对数据进行处理的编写器

 

StreamWriter的构造函数

*1:public StreamWriter(string path);

       参数path表示文件所在的位置

*2:public StreamWriter(Stream stream, Encoding encoding);

       参数Stream 表示可以接受stream的任何子类或派生类,Encoding表示让StreamWriter 在写操作时使用该encoding进行编码操作

*3:public StreamWriter(string path, bool append);

       第二个append参数非常重要,当append参数为true时,StreamWriter会通过path去找当前文件是否存在,如果存在则进行append或overwrite的操作,否则创建新的文件。

*4:public StreamWriter(Stream stream, Encoding encoding, int bufferSize);

       bufferSize参数设置当前StreamWriter的缓冲区的大小

 

StreamWriter 的属性

       StreamWriter的方法大多都继承了TextWriter,这里就不在重复叙述了,这里就简单介绍下StreamWriter独有的属性。

*1:AutoFlush: 这个值来指示每次使用streamWriter.Write()方法后,是否直接将缓冲区的数据写入文件(基础流)。

*2:BaseStream: 和StreamReader相似可以取出当前的Stream对象加以处理。

 

StreamWriter 示例:

class Program
{
    const string txtFilePath = "D:\\TextWriter.txt";
    static void Main(string[] args)
    {
        NumberFormatInfo numberFomatProvider = new NumberFormatInfo();
        // 将小数 “.”换成"?" 
        numberFomatProvider.PercentDecimalSeparator = "?";
        StreamWriterTest test = new StreamWriterTest(Encoding.Default, txtFilePath, numberFomatProvider);
        //StreamWriter
        test.WriteSomthingToFile();
        //TextWriter
        test.WriteSomthingToFileByUsingTextWriter();
        Console.ReadLine();
    }
}
 
/// <summary>
///  TextWriter和StreamWriter的举例
/// </summary>
public class StreamWriterTest
{
    /// <summary>
    /// 编码
    /// </summary>
    private Encoding _encoding;
 
    /// <summary>
    /// IFomatProvider
    /// </summary>
    private IFormatProvider _provider;
 
    /// <summary>
    /// 文件路径
    /// </summary>
    private string _textFilePath;
 
 
    public StreamWriterTest(Encoding encoding, string textFilePath)
        : this(encoding, textFilePath, null)
    {
 
    }
 
    public StreamWriterTest(Encoding encoding, string textFilePath, IFormatProvider provider)
    {
        this._encoding = encoding;
        this._textFilePath = textFilePath;
        this._provider = provider;
    }
 
    /// <summary>
    ///  我们可以通过FileStream 或者 文件路径直接对该文件进行写操作
    /// </summary>
    public void WriteSomthingToFile()
    {
        using (FileStream stream = File.OpenWrite(_textFilePath))
        {
            using (StreamWriter writer = new StreamWriter(stream, this._encoding))
            {
                this.WriteSomthingToFile(writer);
            }
 
            //也可以通过文件路径和设置bool append,编码和缓冲区来构建一个StreamWriter对象
            using (StreamWriter writer = new StreamWriter(_textFilePath, true, this._encoding, 20))
            {
                this.WriteSomthingToFile(writer);
            }
        }
    }
 
    /// <summary>
    ///  具体写入文件的逻辑
    /// </summary>
    /// <param name="writer">StreamWriter对象</param>
    public void WriteSomthingToFile(StreamWriter writer)
    {
        string[] writeMethodOverloadType =
        {
          "01.Write(bool);",
          "02.Write(char);",
          "03.Write(Char[])",
          "04.Write(Decimal)",
          "05.Write(Double)",
          "06.Write(Int32)",
          "07.Write(Int64)",
          "08.Write(Object)",
          "09.Write(Char[])",
          "10.Write(Single)",
          "11.Write(Char[])",
          "12.Write(String)",
          "13.Write(UInt32)",
          "14.Write(string format,obj)",
          "15.Write(Char[])"
        };
 
        // 定义writer的AutoFlush属性,如果定义了该属性,就不必使用writer.Flush方法
        writer.AutoFlush = true;
        writer.WriteLine("这个StreamWriter使用了{0}编码", writer.Encoding.HeaderName);
 
        //这里重新定位流的位置会导致一系列的问题
        //writer.BaseStream.Seek(1, SeekOrigin.Current);
        writer.WriteLine("这里简单演示下StreamWriter.Writer方法的各种重载版本");
 
        writeMethodOverloadType.ToList().ForEach
            (
                (name) => { writer.WriteLine(name); }
            );
        writer.WriteLine("StreamWriter.WriteLine()方法就是在加上行结束符,其余和上述方法是用一致");
        //writer.Flush();
        writer.Close();
    }
 
    public void WriteSomthingToFileByUsingTextWriter()
    {
        using (TextWriter writer = new StringWriter(_provider))
        {
            writer.WriteLine("这里简单介绍下TextWriter 怎么使用用户设置的IFomatProvider,假设用户设置了NumberFormatInfoz.PercentDecimalSeparator属性");
            writer.WriteLine("看下区别吧 {0:p10}", 0.12);
            Console.WriteLine(writer.ToString());
            writer.Flush();
            writer.Close();
        }
    }
}
http://www.jmfq.cn/news/5121379.html

相关文章:

  • 眉山网站建设公司/西安做推广优化的公司
  • 手机网站信任从哪里设置/app推广渠道
  • 伪静态网站网站 目录写入权限/网络营销渠道有哪些
  • 扬中市做网站/营销软文范文
  • 做网站水印/国内比较好的软文网站
  • 网站源码防盗原理/伊春seo
  • 网站查询系统怎么做/宁波seo优化报价多少
  • 淘宝店有给网站做优化am/今日热点新闻一览
  • 网站开发毕业答辩问题/windows优化大师好吗
  • 武汉网站建设的/爱站小工具
  • 怎么做淘客网站/互联网营销模式
  • 网站做seo需要大量文章/武汉seo人才
  • 扬州工程建设招标网/上海优化外包
  • 网站建设公司有多少钱/搜索引擎优化方法案例
  • 站长查询seo是什么意思/免费b站软件下载
  • 做网站的公司都有哪些/百度收录关键词
  • 海宁高端网站设计/营销战略
  • 优惠券精选网站怎么做/做seo必须有网站吗
  • 做兼职推荐网站/html网页制作动态效果
  • 个人网站备案能做什么内容/今日刚刚发生的新闻
  • 做交友网站的前景/怎么做网站排名
  • 电脑哪里做ppt下载网站/免费网站或软件
  • 新闻网站跟贴怎么做/广告投放价目表
  • 400选号网站源码/网络兼职平台
  • 百度霸屏培训/优化排名
  • 教你做网站的视频/账户竞价托管费用
  • 软件公司网站设计/前端性能优化有哪些方法
  • 企业管理咨询网站模板/seo收费低
  • 新网站如何做推广软文/长沙网站优化
  • 营销型网站建设方法/凡科网免费建站官网