我只是想澄清一下我对XmlWriter和抽象类的工作原理的理解。
我的想法是,抽象类不能被实例化,尽管它可以包含可供继承类使用的基方法。
因此,在研究XmlWriter时,我发现要实例化XmlWriter,可以调用XmlWriter.Create(....,它返回...的实例。XmlWriter,然后可以使用它:
FileStream fs = new FileStream("XML.xml", FileMode.Create);
XmlWriter w = XmlWriter.Create(fs);
XmlSerializer xmlSlr = new XmlSerializer(typeof(TestClass));
xmlSlr.Serialize(fs, tsIn);经过测试,这显然是可行的。有没有人能帮我弄明白这是怎么回事。据我所知,这里没有或应该没有“实例”可用??
发布于 2010-05-21 19:11:00
您不能使用new创建实例,但是这里使用的Create是所谓的静态工厂方法;它不是构造函数。您会发现,实际上,Create返回的对象并不属于abstract class XmlWriter,而是属于其他一些具体的子类。
另请参阅
发布于 2010-05-21 19:18:59
你得到的对象并不是抽象的。在实现XmlWriter的.NET框架中有13个类。它们都是内部的,如果你用Reflector查看源代码,你才能看到它们的名字。
不需要自己知道这13个类的名称,这对您和Microsoft都非常有价值。对你来说,因为你不需要学习选择正确的细节。因为它们可以完全更改这些类的实现,甚至是名称,而您的代码永远不会注意到。
这称为Factory Pattern。
发布于 2010-05-21 19:19:33
这就是所谓的factory pattern。
在这种情况下,抽象类还充当工厂,负责创建扩展自身的类的具体实例。
这样,创建正确类的责任就交给了工厂,工厂通常会根据您传入的一些参数或其他东西(如配置/环境等)来决定要创建的类。
https://stackoverflow.com/questions/2881487
复制相似问题