C#:你会给一个 IEnumerable 类起啥名字?
Posted
技术标签:
【中文标题】C#:你会给一个 IEnumerable 类起啥名字?【英文标题】:C#: What would you name an IEnumerable class?C#:你会给一个 IEnumerable 类起什么名字? 【发布时间】:2009-07-14 19:21:08 【问题描述】:在阅读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
几乎可以工作,但听起来有点奇怪......你会怎么称呼它?
【问题讨论】:
类 ProductWhozitWhatzit ... 几个月来我一直在尝试让 ProductAmagig 进行登记 老实说,这是个人喜好/取决于高级开发人员。用于命名约定。我以前从未继承过“IList您通常不会将类的名称基于它实现的任何接口。 (当有多个类时,您首先选择哪一个?)基于继承的类是很典型的,但更常见的是仅仅基于类的目的,当然不是界面。 (接口可能以类命名,如果有的话。)
您的示例有些无效,因为精心设计的 ProductCollection
应该实现 ICollection<Product>
和 IEnumerable<Product>
而精心设计的 ProductList
应该同时实现这两个接口作为IList<Product>
。
如果您查看 .NET Framework 的 BCL,您应该注意到情况正是如此。 List<T>
类实现了所有三个接口,Collection<T>
类也是如此(但请注意,在一般情况下,“集合”不需要实现 IList<T>
)。
【讨论】:
@Svish:很高兴它有帮助。 BCL 在这里通常是一个很好的模型(尽管它可能包含奇怪的不一致)。只要您在自己的类名上保持一致,就不会出错。【参考方案2】:我认为“序列”是一个很好的后缀。
【讨论】:
实际上也在考虑那个。 确实如此。上面的海报没有考虑到项目列表可能是动态生成的,而不是由某种实际的列表或数组支持。【参考方案3】:如果它只实现IEnumerable<Product>
,那么我将它命名为ProductEnumeration
,但我可以随意命名它的一个实例products
。另一方面,我不记得曾经创建过只实现IEnumerable<T>
的类。如果您不能向其中添加东西似乎没有多大意义,如果可以,那么我将从实现 IEnumerable<T>
的集合类之一派生并继承该行为。
如果我要返回 Product 实体的枚举,我只需将其返回为 IEnumerable<Product>
而无需特殊类。
【讨论】:
【参考方案4】:这取决于上下文,例如,它可能是ProductsCatalog
(暗示IEnumerable
的只读性质)。
更一般地说,它可能是ProductsView
。当然,获取的Products
是可以修改的,但我觉得它“听起来”很合适。
【讨论】:
【参考方案5】:如果您查看 .NET Framework 中实现 IEnumerable<T>
的类型,我会说最常见的后缀是 Collection
,然后是列表包含的复数形式。然后是一些“特殊情况”(例如Queue
和Stack
)。我个人会投票给Collection
作为第一手选择。
【讨论】:
【参考方案6】:这里的问题是 List 或 Collection 强加了它们的行为方式。但是 IEnumerable 是非常通用的,不仅仅是 C# 中泛型的意思。每个实现都可以在它后面。
一些建议:
ProductIterator:迭代产品。 ProductRetriever:检索产品。 ProductCreator:这会在运行时创建新产品。【讨论】:
我不会称之为ProductIterator
。如果您实现IEnumerable
,则有一个GetEnumerator
方法返回一个IEnumerator
,它是实际的迭代器。【参考方案7】:
在我根据自己的经验能想到的几乎所有情况下,我都不必想出一个名字。编译器为我做这件事,因为我编写了一个迭代器方法而不是手动编写一个类。对于方法名称,将其设为描述序列的复数词似乎很自然。
【讨论】:
【参考方案8】:就像 kek444 我想我得问问它还有什么作用?它实现了 IEnumerable 但这还不是全部,否则你就不需要这个类了,对吧?是收藏吗?它是否将一个可枚举转换为另一个(更改顺序、选择、生成等)?
【讨论】:
【参考方案9】:我会说收藏。它可能建议使用 ReadOnlyCollection 或 ObservableCollection ,但它很好地描述了该类。毕竟它是产品的集合(无论底层类型是什么)。
要解决这个问题和另一个问题,请使用这个 ;)http://www.classnamer.com/
【讨论】:
以上是关于C#:你会给一个 IEnumerable 类起啥名字?的主要内容,如果未能解决你的问题,请参考以下文章
C#和Java中的构造器constructor是啥?起啥作用?为啥不可以被override??
在 C# 中将多个 IEnumerable<T> 提要混合为一个