C#:你会为IEnumerable类命名什么?

时间:2009-07-14 19:21:08

标签: .net naming-conventions

阅读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

几乎有效,但听起来有点奇怪......你会怎么称呼它?

9 个答案:

答案 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,后跟列表包含的复数形式。然后有一些“特殊情况”(例如QueueStack)。我会亲自投票选择Collection作为第一手选择。

答案 5 :(得分:0)

这里的问题是List或Collection强加了他们的行为方式。但IEnumerable非常通用,不仅仅是泛型的C#含义。每个实现都可以支持它。

一些建议:

  • ProductIterator:迭代产品。
  • ProductRetriever:检索产品。
  • ProductCreator:这会在运行时创建新产品。

答案 6 :(得分:0)

几乎在每种情况下,我都能从自己的经验中想到,我没有想到一个名字。编译器为我做了,因为我编写了一个迭代器方法,而不是手工编写一个类。对于方法名称,似乎很自然地只是使它成为描述序列的复数词。

答案 7 :(得分:0)

像kek444一样,我想我还要问它还有什么用呢?它实现了IEnumerable&lt;&gt;但这不是它的全部,否则你不需要这个课吧?这是一个集合?它是否将一个可枚举变换为另一个(更改顺序,选择,生成等)?

答案 8 :(得分:0)

我会说 Collection 。它可能会建议一个ReadOnlyCollection或ObservableCollection,但它很好地描述了这个类。它毕竟是一系列产品(无论基础类型是什么)。

要解决这个问题和另一个问题,请使用;) http://www.classnamer.com/