为啥 C# 似乎不关心一致性? [关闭]

Posted

技术标签:

【中文标题】为啥 C# 似乎不关心一致性? [关闭]【英文标题】:Why doesn't C# seem to care about uniformity? [closed]为什么 C# 似乎不关心一致性? [关闭] 【发布时间】:2016-04-07 15:58:55 【问题描述】:

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

在 C++ 中,人们确实非常关心一致性,否则就不可能使用模板元编程来编写通用代码。然而,在 C# 中,人们似乎不太关心一致性。例如,虽然数组类型具有Length 属性,但List<T> 使用Count。虽然数组类型的IndexOfLastIndexOf 等都是静态方法,但它们对应的List<T> 却不是。这给我的印象是,C# 并没有统一,实际上是在努力变得不统一。这对我来说没有意义。由于 C# 不支持模板元编程,因此一致性不像 C++ 中那么重要。但是,统一在许多其他方面仍然是有益的。例如,人类更容易学习和掌握。当事情高度统一时,你可以掌握一个,然后你就掌握了这一切。请注意,我不是 C++ ***者,也不是顽固分子。我只是不太明白。

【问题讨论】:

这正是该语言的开发人员决定做的事情。 @gunr2171 那么,这些决定背后的动机和理由是什么? 不知道。问微软。这里的社区可以做出一些有根据的猜测,但只有开发人员才能确定。 我投票决定将此问题作为题外话结束,因为这是一个关于语言设计决策的问题。只有开发者才能给出适当的回应。 我同意这个问题可能措辞不当,但核心问题是一个有效的问题,许多 .NET 世界的新手可能会问。我认为它不应该关闭。但话又说回来,为什么不呢?在 Stack Overflow 上,结束问题是我们所做的!耶哈 【参考方案1】:

这里有一个概念问题。

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

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

2) 方法的含义有细微的差别。我相信.Length 暗示某处有一个静态数字,其中.Count 暗示可能会执行一些操作来获取列表中的项目数。

【讨论】:

格式好像切断了左右尖括号。 @AdamV:感谢您的编辑 :) 感谢您抽出时间回答我的问题,因为大多数人似乎只对如何而不是为什么感兴趣。在您给出的两个原因中,1) 对我来说最有意义。 @DaveMarkle - 没问题!

以上是关于为啥 C# 似乎不关心一致性? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

无法创建一致的方法解决方案。为啥? [关闭]

终端上送工作日期和主机系统日期不一致 是为啥

为啥 Javascript 比较运算符在数学上不一致?

为啥域驱动设计似乎只在 C# 和 Java 等静态语言中流行? [关闭]

为啥 glibc "timezone" global 与 DST 上的系统时间不一致?

如何为 Java、C# 和 C++ 中一个项目的不同实现管理一份一致的文档? [关闭]