我可能没有使用正确的标题,但我不确定这些条款。
所以我想使用TextWriter这是一个抽象类。我发现了一段看起来像这样的代码:
TextWriter writer = File.CreateText("path");
编辑:我如何知道需要StreamWriter类型?我从TextWriter的代码中看到的只是它是抽象的。
答案 0 :(得分:0)
确实返回了StreamWriter
个实例。来自msdn关于File.CreateText Method (String)
:
此方法等效于StreamWriter(String,Boolean)构造函数重载,append参数设置为false。
但确实建议将它用作抽象类的对象。
如果你知道,你可以检查返回实例的类型:
TextWriter writer = File.CreateText("path");
Type type = writer.GetType(); //System.IO.StreamWriter in this case
答案 1 :(得分:0)
我如何知道需要StreamWriter类型?
嗯,StreamWriter
不是必需的。可以使用它,但不能必需。
声明编译类型为TextWriter
的变量只意味着可以为其分配任何类型的TextWriter
。例如,您可以在其中放置StringWriter
:
TextWriter writer = new StringWriter(new StringBuilder("Hello World!"));
编译时没有问题。
重要的不是要放在那里,而是你想做什么。如果你想写一个流,请在其中放一个StreamWriter
,如果你想写一个StringBuilder
,那就把StringWriter
放在那里,如果你想写别的东西去创建自己的子类并在那里使用。
另外,你甚至不需要写TextWriter
。你可以做这样的事情:
StreamWriter writer = File.CreateText("path");
"如果我可以指定我想要的具体类型,那么TextWriter
的用途是什么?"你可能会问。
有时你可能想写一个一般做某事的方法,对吧?就像写" Hello World"一样,但该方法并不关心它将写入的位置。
public static void WriteHelloWorld(TextWriter writer) {
writer.Write("Hello World");
}
如果您传递StreamWriter
,它将写入流。如果您传递StringWriter
,它将写入字符串,依此类推。