我最近正在学习C#,具有强大的C ++背景,而且鉴于我对C ++的理解和经验,我不太了解C#。
在C ++中,人们非常关心统一性,否则使用模板元编程编写通用代码是不可能的。然而,在C#中,人们似乎并不关心一致性。例如,虽然数组类型具有Length
属性,但List<T>
使用Count
。虽然IndexOf
,LastIndexOf
和类似数组类型都是静态方法,但List<T>
的对应项不是。{1}}。这给我的印象是,C#实际上是在努力变得不均匀而不是统一的。这对我来说没有意义。由于C#不支持模板元编程,因此统一性并不像C ++那样重要。但是,在许多其他方面,穿制服可能是有益的。例如,人类学习和掌握会更容易。当事物高度统一时,你就会完成一件事,然后掌握所有事情。请注意,我不是C ++狂热分子,也不是死硬。我只是不太懂。
答案 0 :(得分:4)
这里有一个概念问题。
List<T>
以及带有它的其他集合类不是C#构造。它们是BCL中的类。从本质上讲,您可以在任何.NET语言中使用任何BCL类,而不仅仅是C#。如果你问为什么 BCL类在某些方面有所不同,那不是因为设计师不尊重或不想要统一。这可能是(至少两个)原因之一:
1)BCL和FCL随着时间的推移而演变。您可能会看到在添加泛型之前和之后引入的类中存在非常显着的差异。一个示例DataColumnCollection
是IEnumerable
(但不是IEnumerable<DataColumn>
)。这导致您需要强制转换才能执行some operations。
2)方法的含义有细微差别。我认为,.Length
暗示某个地方存在静态数字,其中.Count
表示可能会执行某些操作以获取列表中的项目数。