为什么 C# 似乎不关心一致性?
Why doesn't C# seem to care about uniformity?
我最近在学习C#,有很强的C++背景,鉴于我对C++的理解和经验,我对C#有些不太理解。
在C++中,人们确实非常关心一致性,否则就不可能使用模板元编程来编写通用代码。然而,在C#中,人们似乎不太关心一致性。例如,虽然数组类型具有Length
属性,但List<T>
使用Count
。虽然数组类型的IndexOf
、LastIndexOf
等都是静态方法,但List<T>
的对应方法则不是。这给我的印象是,C#并不是均匀的,而是在努力做到不均匀。这对我来说没有意义。由于C#不支持模板元编程,统一性不像C++那样重要。但是,保持一致在许多其他方面也是有益的。例如,人类将更容易学习和掌握。当事物高度统一时,你掌握了其中一个,你就掌握了所有。请注意,我既不是C++的狂热分子,也不是死忠派。我只是不太明白。
这里有一个概念问题。
List<T>
和其他包含它的集合类都不是C#构造。它们是BCL中的类。本质上,您可以在任何.NET语言中使用任何BCL类,而不仅仅是C#。如果你问为什么BCL类在某些方面不同,这并不是因为设计者不尊重或不想要统一性。这可能是由于(至少两个)原因之一:
1) BCL和FCL随着时间的推移而演变。在添加泛型之前和之后引入的类中,您可能会看到非常显著的差异。一个示例DataColumnCollection
是IEnumerable
(但不是IEnumerable<DataColumn>
)。这导致您需要进行强制转换以执行一些操作。
2) 这个方法的意思有细微的差别。我相信,.Length
是用来暗示某个地方有一个静态数字的,其中.Count
意味着可能需要进行一些运算来获得列表中的项目数量。
- 当我不关心顺序并且没有重复项时,更快的擦除删除成语?
- 编译器在不需要复制构造函数时关心复制构造函数
- RXCPP:创建一个不关心可观察量输入类型的扩展
- 为什么'acquire/release'不能保证 c++11 中的顺序一致性?
- 为什么BKDFHash不关心超出范围的问题?
- 不同编译器的名称查找的不一致性
- C 标准中是否有任何计划来解决初始化器列表构造函数的不一致性
- 为什么我们不关心位顺序?
- 填充C 中C结构的填充字节?(不关心结构包装!)
- 在没有单调时钟的系统上,是否不可能实现一致性
- 为什么 C# 似乎不关心一致性?
- 当我们不关心返回值时,在 c++ 的代码片段中只调用一次函数的更好方法?
- 如果我不关心返回值,我是否会遇到性能问题
- 如何不关心类成员模板
- 使用Google mock,如何在不关心/设置任何调用期望的情况下提供模拟实现
- 我必须关心C++结构末尾的填充吗?我保证我不会在数组中使用它
- 扩展类所需包含中的不一致性
- C++:如果我不使用 move,我还需要关心复制控制吗?
- 如何在不关心相机的 glew 中创建叠加菜单?
- 如果我不关心返回值,我需要pthread_exit吗