C#,我如何从抽象类中找出派生类型? (TextWriter的)

时间:2017-08-04 08:31:23

标签: c# types

我可能没有使用正确的标题,但我不确定这些条款。

所以我想使用TextWriter这是一个抽象类。我发现了一段看起来像这样的代码:

TextWriter writer = File.CreateText("path");

编辑:我如何知道需要StreamWriter类型?我从TextWriter的代码中看到的只是它是抽象的。

2 个答案:

答案 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,它将写入字符串,依此类推。