换句话说,使用是否正确:
public class CustomerList : System.Collections.Generic.List<Customer>
{
/// supposed to be empty
}
而不是:
using CustomerList = System.Collections.Generic.List<Customer>
我宁愿使用第一种方法,因为我只需要定义一次CustomerList,每次我需要一个客户列表时,我总是使用相同的类型。另一方面,使用名称别名方法不仅迫使我必须在任何地方重新定义它,而且每次有人想要使用它时都会给出不同的别名(想想一个大团队),从而导致代码不太可读。
请注意,在这种情况下的意图绝不是扩展类,只是为了创建一个别名。
答案 0 :(得分:11)
好吧,除非你在基类中添加一些功能,否则创建包装器对象是没有意义的。如果你真的需要,我会选择第二,但为什么不创建一个变量?
List<Customer> customerList = new List<Customer>();
答案 1 :(得分:6)
不要这样做。当人们读到:
List<Customer>
他们立即明白了。当他们读到:
CustomerList
他们必须去弄清楚CustomerList是什么,这会让你的代码更难阅读。除非你是唯一一个在代码库上工作的人,否则编写可读代码是个好主意。
答案 2 :(得分:4)
我同意不以这种方式使用别名。您团队中的任何人都不应该以所呈现的方式使用别名;这不是提供别名的原因。此外,从泛型的工作方式来看,无论你使用多少个地方,都只有一个List类。
除了声明和使用List<Customer>
之外,您最终还是希望将该列表传递给其他人。避免传递具体的List<Customer>
,而是传递IList<Customer>
或ICollection<Customer>
,因为这会使这些方法更具弹性,更容易编程。
将来的某一天,如果你确实需要一个CustomerList集合类,你可以在其上实现ICollection<Customer>
或IList<Customer>
并继续将它传递给那些方法,而不会改变甚至更好地了解它们
答案 3 :(得分:3)
其实你也不应该使用它们。公共API中的correct approach according to the framework design guidelines is to either use or inherit from System.Collections.ObjectModel.Collection<T>(List&lt; T&gt;只应用于内部实现)。
但是就命名的具体问题而言,建议似乎是直接使用通用类型名称而不使用别名,除非您需要向集合中添加功能:
返回Collection&lt; T&gt;来自对象 模型提供标准平原 香草集合API。
返回Collection&lt; T&gt;的子类 从对象模型提供 高级集合API。
答案 4 :(得分:3)
使用继承来执行别名/类型定义存在需要重新定义相关构造函数的问题。
由于在任何地方这样做很快就会变得不合理,为了保持一致性,最好避免它。
答案 5 :(得分:1)
这是“依赖”问题之一。
如果您需要的是一个除了您的其他要求之外还充当客户列表的新类,那么继承就是这样。
如果您只想使用客户列表,请使用变量。
答案 6 :(得分:1)
如果您只是想节省打字,那么请使用后者。你不会以这种方式遇到任何奇怪的继承问题。
如果你真的想要公开一个逻辑上不同的集合类型,那么使用前者 - 你可以返回并添加内容。
就个人而言,我只会使用List<Customer>
并将其称为一天。
答案 7 :(得分:1)
我基本同意Ed。如果您不需要实际扩展通用List构造的功能,只需使用通用List:
List<Customer> customerList = new List<Customer>();
如果你确实需要扩展功能,那么通常你会看到继承。
第三种可能性是您需要从通用列表构造中显着更改功能,在这种情况下,您可能只想从IEnumerable继承。这样做使类可用于可枚举操作(例如“foreach”),但允许您完全定义所有类行为。
答案 8 :(得分:1)
一位程序员节省打字很可能是下一个程序员的维护噩梦。我只是说正确输入通用,正如这里有很多人所说的那样。它更清晰,更准确地描述了代码的意图,它将有助于维护程序员。 (谁可能是你,六个月和四个新项目的未来!)