首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用XmlWriter.Create实例化抽象类XmlWriter (...?

如何使用XmlWriter.Create实例化抽象类XmlWriter (...?
EN

Stack Overflow用户
提问于 2010-05-21 19:08:28
回答 4查看 3.3K关注 0票数 12

我只是想澄清一下我对XmlWriter和抽象类的工作原理的理解。

我的想法是,抽象类不能被实例化,尽管它可以包含可供继承类使用的基方法。

因此,在研究XmlWriter时,我发现要实例化XmlWriter,可以调用XmlWriter.Create(....,它返回...的实例。XmlWriter,然后可以使用它:

代码语言:javascript
复制
FileStream fs = new FileStream("XML.xml", FileMode.Create);

XmlWriter w = XmlWriter.Create(fs);

XmlSerializer xmlSlr = new XmlSerializer(typeof(TestClass));

xmlSlr.Serialize(fs, tsIn);

经过测试,这显然是可行的。有没有人能帮我弄明白这是怎么回事。据我所知,这里没有或应该没有“实例”可用??

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-21 19:11:00

您不能使用new创建实例,但是这里使用的Create是所谓的静态工厂方法;它不是构造函数。您会发现,实际上,Create返回的对象并不属于abstract class XmlWriter,而是属于其他一些具体的子类。

另请参阅

  • Wikipedia/Factory method pattern
票数 9
EN

Stack Overflow用户

发布于 2010-05-21 19:18:59

你得到的对象并不是抽象的。在实现XmlWriter的.NET框架中有13个类。它们都是内部的,如果你用Reflector查看源代码,你才能看到它们的名字。

不需要自己知道这13个类的名称,这对您和Microsoft都非常有价值。对你来说,因为你不需要学习选择正确的细节。因为它们可以完全更改这些类的实现,甚至是名称,而您的代码永远不会注意到。

这称为Factory Pattern

票数 4
EN

Stack Overflow用户

发布于 2010-05-21 19:19:33

这就是所谓的factory pattern

在这种情况下,抽象类还充当工厂,负责创建扩展自身的类的具体实例。

这样,创建正确类的责任就交给了工厂,工厂通常会根据您传入的一些参数或其他东西(如配置/环境等)来决定要创建的类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2881487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档