C#类工厂

And*_*ndy 5 c# design-patterns

我有一个名为Foo的类,其功能类似于以下内容

List<Bar> LoadData();
Run Code Online (Sandbox Code Playgroud)

Foo和Bar都在我想在其他项目中重用的库中.现在我正在开发一个新项目,我想继承Bar.我们称之为NewBar.

什么是让Foo.LoadData返回NewBar列表的简单而灵活的方法?我认为工厂是需要的,或者只是一个委托功能.谁能提供一个例子?

谢谢,安迪

Ali*_*tad 1

这里有一些问题。由于您正在使用List<Bar>此功能,因此如果您返回,则不会工作List<Baz>,因为List<>它不执行协方差

我的建议是重新设计它以返回IEnumerable<Bar>并使其virtual在新项目中创建一个SubFoo并且您可以返回IEnumerable<Baz>


更新

好的,根据您提供的新信息(您使用它来从 XML 填充列表),我将创建一个virtual protected CreateBar()创建新 bar 对象的对象,并由 LoadData() 调用以Bar在循环中创建新对象。在SubFoo我重写并返回Baz。在 中SubFoo,我将调用base.LoadData()并填充Baz列表,然后添加逻辑来填充 中Baz不存在的新属性Bar

也许

只需使用 XML 序列化,我就可以免费获得所有这些!