Я всегда находил лучшее, что можно сделать, это просто посмотреть, какие методы они предоставляют и как вы можете их построить. Это почти всегда главное, если не единственное, что меня волнует при использовании API. Как мне его построить и что он может сделать?
Вы не можете создать экземпляр TextWriter. Это абстрактно. Это говорит мне, что единственная реальная цель, которой он служит, это, ну, абстракция Если вы пишете функцию, которая принимает в качестве аргумента любой писатель, есть большая вероятность, что вы просто должны использовать TextWriter для большей универсальности.
StreamWriter, который вы можете создать, и он делает то, что говорит, пишет в потоки. Это означает, что для выполнения любой реальной записи потребуется поток. Однако, получив этот поток, вы можете делать все изящные вещи, например писать целую строку за раз, вместо того, чтобы иметь дело с отдельными символами (или, скорее, байтами), как если бы вы были непосредственно в потоке.
Таким образом, в основном вы получаете поток, чтобы вы могли передавать его в StreamWriter (или Reader). Если вы пишете текст, вы, вероятно, не хотите работать непосредственно с потоком, не больше, чем вы хотите работать с массивом символов вместо строки.
FileStreams может быть удобно создан непосредственно из классов File и FileInfo, и в моем случае именно так они обычно создаются. Получить файл (мне нравится использовать FileInfo) и вызвать OpenWrite (). Передайте его StreamWriter (это просто тип TextWriter), и вы уже в пути.
Обобщение: если вы хотите выяснить класс, попробуйте посмотреть, как вы его создаете, и что он может делать. Это обычно многое проясняет.