为什么 C# 似乎不关心一致性?

Why doesn't C# seem to care about uniformity?

本文关键字:一致性 不关心 为什么      更新时间:2023-10-16

我最近在学习C#,有很强的C++背景,鉴于我对C++的理解和经验,我对C#有些不太理解。

在C++中,人们确实非常关心一致性,否则就不可能使用模板元编程来编写通用代码。然而,在C#中,人们似乎不太关心一致性。例如,虽然数组类型具有Length属性,但List<T>使用Count。虽然数组类型的IndexOfLastIndexOf等都是静态方法,但List<T>的对应方法则不是。这给我的印象是,C#并不是均匀的,而是在努力做到不均匀。这对我来说没有意义。由于C#不支持模板元编程,统一性不像C++那样重要。但是,保持一致在许多其他方面也是有益的。例如,人类将更容易学习和掌握。当事物高度统一时,你掌握了其中一个,你就掌握了所有。请注意,我既不是C++的狂热分子,也不是死忠派。我只是不太明白。

这里有一个概念问题。

List<T>和其他包含它的集合类都不是C#构造。它们是BCL中的类。本质上,您可以在任何.NET语言中使用任何BCL类,而不仅仅是C#。如果你问为什么BCL类在某些方面不同,这并不是因为设计者不尊重或不想要统一性。这可能是由于(至少两个)原因之一:

1) BCL和FCL随着时间的推移而演变。在添加泛型之前和之后引入的类中,您可能会看到非常显著的差异。一个示例DataColumnCollectionIEnumerable(但不是IEnumerable<DataColumn>)。这导致您需要进行强制转换以执行一些操作。

2) 这个方法的意思有细微的差别。我相信,.Length是用来暗示某个地方有一个静态数字的,其中.Count意味着可能需要进行一些运算来获得列表中的项目数量。