When I was writing some I/O routine in C++
, I would usually make it as generic as possible, by operating on the interfaces from <iostream>
.
For example:
void someRoutine(std::istream& stream) { ... }
How should the same be done in C#
?
I suspect I could write my routines based on the System.IO.TextReader
or System.IO.TextWriter
, but I'm not sure.
Obviously I'm seeking for a same base class in C#
, which is as generic as std::istream
or std::ostream
and which can be extended in many ways (for example, as boost::io开发者_开发百科streams
extends the std::
streams).
If you want to work with strings, you should take a TextReader
or TextWriter
.
If you want to work with bytes, you should take a Stream
.
These classes are inherited by concrete implementations such as FileStream
, StringWriter
, and NetworkStream
.
Use System.IO.Stream if you only care about bytes. TextReader
/ TextWriter
are for when you know the underlying data to be text.
The base class is Stream
. MemoryStream, FileStream, etc. inherit from this class.
You can have the C# function taking a Stream ( System.IO.Stream ) as in C++. If this is appropriate depends on the function you write.
精彩评论