C#中,我如何从抽象类中找出派生类型? (TextWriter)
我可能没有使用正确的标题,但我不确定这些条款。C#中,我如何从抽象类中找出派生类型? (TextWriter)
所以我想使用TextWriter这是一个抽象类。我发现一段代码如下所示:
TextWriter writer = File.CreateText("path");
编辑:我如何知道StreamWriter类型是必需的?我从TextWriter的代码中可以看到,它是抽象的。
我怎么知道该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
它会写入一个字符串等等。
谢谢,这更接近我想学的东西。所以 - 你怎么知道可以使用StringWriter,例如?这就是我所要求的。我看不到我的代码本身。 – user970696
@ user970696可以使用从“TextWriter”继承的所有东西。它在文档中显示.NET框架中的哪些类型继承自它:https://msdn.microsoft.com/zh-cn/library/system.io.textwriter(v=vs.110).aspx查看“继承层次结构”部分。你现在明白了么? – Sweeper
确实是一个StreamWriter
实例返回。从msdn约File.CreateText Method (String)
:
此方法等效于设置为false追加参数的StreamWriter(字符串,布尔值)构造过载。
但确实建议使用它作为抽象类的对象。
如果wnat,你可以检查返回的实例的类型:
TextWriter writer = File.CreateText("path");
Type type = writer.GetType(); //System.IO.StreamWriter in this case
@ user970696我添加了代码来显示“编写器”实例的类型 – meJustAndrew
但这不是我所要求的。你怎么知道StreamWriter是预期的?你如何从TextWriter的代码中知道?除非我看了MSDN,否则我不知道该用什么。 – user970696
我不明白你的问题。 - “我怎么知道该用什么......” – Jamiec
仅仅使用'TextWriter'会让你失望吗? –
我都没有。只要所有这些类都是'TextWrter'的实例,为什么你要关心该方法是否返回'StreamQriter'或甚至是'MyClass'? – HimBromBeere