Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么不是';StringBuilder类是否继承自Stream?_C#_Stream_Stringbuilder - Fatal编程技术网

C# 为什么不是';StringBuilder类是否继承自Stream?

C# 为什么不是';StringBuilder类是否继承自Stream?,c#,stream,stringbuilder,C#,Stream,Stringbuilder,我只是好奇而已。我觉得StringBuilder的行为在功能上(如果不是技术上)与流相同——它是一个可以添加其他数据的数据箱 同样,我很好奇。流通常指的是外部输入/输出源(文件、网络)。StringBuilder没有这样的特性。因为它不是真正的流。它更像是一个不断增长的缓冲区。虽然两者都可以添加数据,但整体功能是不同的 流用于从某个源输入或输出数据,而不是构建某个源。StringBuilder不需要流提供的功能(如缓冲等)来构建资源。StringBuilder不仅仅具有附加功能。它还具有插入函数

我只是好奇而已。我觉得StringBuilder的行为在功能上(如果不是技术上)与流相同——它是一个可以添加其他数据的数据箱


同样,我很好奇。

流通常指的是外部输入/输出源(文件、网络)。StringBuilder没有这样的特性。

因为它不是真正的流。它更像是一个不断增长的缓冲区。

虽然两者都可以添加数据,但整体功能是不同的


流用于从某个源输入或输出数据,而不是构建某个源。StringBuilder不需要流提供的功能(如缓冲等)来构建资源。

StringBuilder
不仅仅具有附加功能。它还具有插入函数,这对于流来说是不自然的。如果您想要一个包含
StringBuilder
流的流是二进制数据的输入和输出,请使用
StringWriter

StringBuilder是建立文本数据的方法

除此之外,还有状态的问题——StringBuilder只有当前值,不知道“位置”。它允许您在其中的任何位置访问和修改数据。另一方面,一个流在逻辑上是一个潜在的无限的数据流,中间有一个光标来表示你要去哪里。通常只需向前读/写,使用Seek/Position跳到数据流的特定部分


试着想象一下用StringBuilder实现流API。。。它就是不合适。您可以这样做,但最终基本上是使用StringReader和StringWriter。

另一方面,您可以在System.IO中找到类StringReader/WriterStringWriter例如,针对底层的StringBuilder实现TextWriter

就我个人而言,我从未使用过它,但如果你有一个文本文件编写例程,你可以让它对文本编写器起作用。然后,在测试中,不是实例化一个StreamWriter而是实例化一个StringWriter,然后可以通过查看底层的StringBuilder来检查编写的内容


现在我头晕…

+1。。。我正在写一个与此惊人相似的答案…:D