阅读this question时,我开始怀疑。假设你有这两个:
class ProductCollection : ICollection<Product>
class ProductList : IList<Product>
你会称之为IEnumerable<Product>
?
class Product--- : IEnumerable<Product>
在我读到其他问题之前,我可能实际上称之为ProductCollection
,但考虑到新信息,这可能会有点误导,因为它没有实现ICollection<Product>
。你可以称之为Products
吗?
var products = new Products(); // products is/are products
几乎有效,但听起来有点奇怪......你会怎么称呼它?
答案 0 :(得分:6)
您通常不会将类的名称基于它实现的任何接口。 (当有多个时,你选择哪一个,一开始呢?)基于继承的类是非常典型的,但更多时候只是为了类的目的,当然不是界面。 (接口可能以类命名,如果有的话。)
设计良好的ProductCollection
应该在设计良好的ICollection<Product>
下实施IEnumerable<Product>
和 ProductList
这一事实使您的示例无效。应该实现这些接口以及IList<Product>
。
如果你查看.NET Framework的BCL,你应该注意到这正是如此。 List<T>
类实现所有三个接口,Collection<T>
类也是如此(但请注意,在一般情况下,'集合'不需要实现IList<T>
)。
答案 1 :(得分:6)
我认为“序列”将是一个很好的后缀。
答案 2 :(得分:5)
如果它只实现IEnumerable<Product>
,那么我会将其命名为ProductEnumeration
,但我可以随意命名它的实例products
。另一方面,我不记得曾经创建过只实现IEnumerable<T>
的类。如果您不能添加内容并且如果可以的话,似乎没有多大意义,那么我将从其中一个实现IEnumerable<T>
的集合类派生并继承该行为。
如果我返回的是Product实体的枚举,我只需将其作为IEnumerable<Product>
返回,而不需要特殊的类。
答案 3 :(得分:2)
这取决于上下文,例如,它可能是ProductsCatalog
(暗示IEnumerable
的只读性质。)
更一般地说,它可能是ProductsView
。当然,Products
提取的内容是可以修改的,但我觉得它“听起来”是合适的。
答案 4 :(得分:0)
如果你看一下.NET Framework中实现IEnumerable<T>
的类型,我会说最常见的后缀是Collection
,后跟列表包含的复数形式。然后有一些“特殊情况”(例如Queue
和Stack
)。我会亲自投票选择Collection
作为第一手选择。
答案 5 :(得分:0)
这里的问题是List或Collection强加了他们的行为方式。但IEnumerable非常通用,不仅仅是泛型的C#含义。每个实现都可以支持它。
一些建议:
答案 6 :(得分:0)
几乎在每种情况下,我都能从自己的经验中想到,我没有想到一个名字。编译器为我做了,因为我编写了一个迭代器方法,而不是手工编写一个类。对于方法名称,似乎很自然地只是使它成为描述序列的复数词。
答案 7 :(得分:0)
像kek444一样,我想我还要问它还有什么用呢?它实现了IEnumerable&lt;&gt;但这不是它的全部,否则你不需要这个课吧?这是一个集合?它是否将一个可枚举变换为另一个(更改顺序,选择,生成等)?
答案 8 :(得分:0)
我会说 Collection 。它可能会建议一个ReadOnlyCollection或ObservableCollection,但它很好地描述了这个类。它毕竟是一系列产品(无论基础类型是什么)。
要解决这个问题和另一个问题,请使用;) http://www.classnamer.com/