为什么 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 来处理。 (也许 TcpWriter
?DBWriter
?)
CsvWriter
的一项工作是格式化 CSV 输出。它不关心它要去哪里,所以它依赖于 TextWriter
将它保存在某个地方。这就是正确的封装。
在下面的示例中,为什么我需要单独制作一个 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 来处理。 (也许 TcpWriter
?DBWriter
?)
CsvWriter
的一项工作是格式化 CSV 输出。它不关心它要去哪里,所以它依赖于 TextWriter
将它保存在某个地方。这就是正确的封装。