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

标签 c# c++

<分区>

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

在C++中,人们确实非常关心统一性,否则不可能使用模板元编程编写通用代码。然而,在 C# 中,人们似乎不太关心一致性。例如,虽然数组类型有一个 Length属性(property),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> )。这导致您需要转换才能执行 some operations .

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

关于c# - 为什么 C# 似乎不关心一致性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36481445/

相关文章:

c# - 如何使用 Moq 对 Entity Framework 6 中的删除操作进行单元测试

c# - .where(...).Any() 与 ..Any(...) 之间的性能差异

c++ - 在 C++ 中读取文件时跳过 EOF

c# - 删除文件夹项

c# - 具有空传播的事件引发的线程安全

c# - 在 C# 中选中和取消选中 TreeView 的所有节点

c++ - 默认启动策略和 std::launch::deferred 之间的区别

c++ - 为什么每次运行程序都会返回不同的值? 0x3759F8B0 - 0x100

c++ - 如何在 Mongoose 中接收发送的数据?

c++ - 模板构造函数重载问题