我在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>
上添加额外方法的错觉……这是一个棘手的辩论,因此我只是在提及它,而不是说“做到这一点”。