为什么 csvWriter 需要一个 StreamWriter 对象,为什么它不能为我创建它?

Why does csvWriter require a StreamWriter object, why can't it make it for me?

在下面的示例中,为什么我需要单独制作一个 StreamWriter class 然后将其传递给 CsvWriter?

只是感觉重复和多余。如果我再也不需要使用 StreamWriter 怎么办?其次,如果每次我想使用 CsvWriter 时都需要一个 StreamWriter,让 CsvWriter 帮我处理不是更好吗?

var writer = new StreamWriter("./Output.csv"))
var csvWriter = new CsvWriter(writer, CultureInfo.InvariantCulture)
{
    csvWriter.WriteRecords(songQueryResults);
}
Console.WriteLine("Done");

最近我一直在学习 OOP,这似乎违背了封装的想法,这就是我问这个问题的原因

没有。它可以是任何 TextWriter。这意味着,当然,StreamWriter。还有 HttpWriter 或任何您可能会想到的未来奇怪用例,在这些用例中您需要编写 CSV 并可能编写自己的 class 来处理。 (也许 TcpWriterDBWriter?)

CsvWriter 的一项工作是格式化 CSV 输出。它不关心它要去哪里,所以它依赖于 TextWriter 将它保存在某个地方。这就是正确的封装。