我在Business对象中有一个称为Product的类,在另一个类中,我想返回该类的对象列表。我应该使用哪种方法?

public static List<Product> GetProductList() { .... }

或在我的业务对象命名空间中创建另一个名为ProductList的类,该类扩展了List <Products>,如下所示:
public class ProductList :List<Products > { .... }

在那里使用
public static ProductList GetProductList() { .... }

两者之间有什么区别吗?内存分配和性能如何?

最佳答案

拥有额外的类型(ProductList)会产生很小的开销,但是没有什么大的。但这实际上取决于您想做什么。在许多方面,ProductList仍然不是一个好主意,因为它将List<T>刻录到公共(public)API中,并且List<T>并不是非常可扩展的(例如,没有一种方法是virtual)。 Collection<T>可能具有更多的可扩展性选项。

我主张抽象或封装:

public static IList<Product> GetProductList() {...} // abstraction; can return
                                                    // List<Product> if we want

或者:
public class ProductList : IList<Product> {...} // encapsulation, but need to
                                                // add a lot of dull code

可惜的是,C#并没有使封装方法变得简单(我在考虑“mixins”)。

请注意,另一个技巧(有时是合适的,有时不适合)是使用扩展方法在IList<Product>上添加额外方法的错觉……这是一个棘手的辩论,因此我只是在提及它,而不是说“做到这一点”。

10-07 15:27