因为离开类型参数照样不是真的干。考虑这个类:
class Muffin {
List<string> _peopleWhoLikeMuffins = new List<string>();
public Muffin(List<string> peopleWhoLikeMuffins) {
_peopleWhoLikeMuffins = peopleWhoLikeMuffins);
}
public void AddMuffinLiker(string p) {
_peopleWhoLikeMuffins.Add(p);
}
}
这是真的很短,只包含基本的功能,但我不得不使用string
- genertic类型参数 - 四倍。它将永远是一样的。如果我决定稍后改变这种类型,我将不得不更换所有四种产品。
在现实世界的场景中,我们正在谈论数百个而不是4个。因此,总是封装它并不是一件容易的事情,但它绝对值得考虑。
现在,我的例子不是很好(不仅仅是因为愚蠢的名字),但是你明白了 - 你会有很多字段和变量的声明和实例化,每次你必须传递一个类型参数,该参数在整个代码库中始终保持不变,除非其他类也是通用的。
这样做的另一个好处是,如果您需要向集合中添加一些额外的状态/行为,那么您的工作量会少得多。
所有人都说,我自己并不经常使用这种抽象。
在您给出的例子中,将Muffin泛化为泛型(并将其与字符串一起使用)比对列表进行硬编码更有意义,所以我不认为它是有利于创建特定类型。 –
sinelaw
@sinelaw:是的,我在编辑中指出这个例子不太好,可能也应该是通用的 – Dyppl