Let me first apologize if this question could sound perhaps sort of amateurish for the seasoned programmers among you, the thing is I\'ve been having many arguments about th
There's an obvious difference between a "Stream" and a "Writer/Reader".
A stream is a byte level representation, and is really an abstract concept that can be implemented in a variety of ways. For example, you have a FileStream and a MemoryStream. Both those are streams of bytes, but they are stored differently.
Writers and Readers give you a way to process streams, adding and extracting data from them.
For your particular examples, TextWriter is an abstract class that writes characters to a stream sequentially. It has several implementations (StreamWriter, StringWriter) that do are useful in different contexts. You would use whichever makes sense at the time. For several APIs however, all that is needed is a TextWriter, or something to call "Write" or "WriteLine" on. It isn't a concern of those APIs if your writer is used to put stuff into a string, some arbitrary memory, or a file.