为什么是“使用系统”;不算作坏习惯吗?
我具有C ++背景,并且我完全理解并同意以下问题的答案:为什么“使用命名空间标准”;被认为是不良做法? 因此,令我惊讶的是,现在已经有了C#的经验,我看到了与之完全相反的地方: using Some.Namespace;确实在任何地方都使用过。无论何时开始使用类型,都首先为其名称空间添加using指令(如果尚不存在)。我不记得曾经看到过一个.cs不是以-开头的文件using System; using System.Collections.Generic; using X.Y.Z; etc...。实际上,如果您通过Visual Studio向导添加了新文件,即使您根本不需要它们,它也会在其中自动添加一些using指令。因此,尽管在C ++社区中您基本上被私刑了,但C#甚至鼓励这样做。至少我是这样。 现在,我知道在C#和C ++中使用指令并不完全相同。另外,我确实知道,using namespace在C ++中可以做的最讨厌的事情之一,即将其放入头文件中,由于缺少头文件和的概念,因此在C#中没有同等讨厌的对象#include。 但是,尽管它们有所不同,但在C#和C ++中使用伪指令却达到了相同的目的,即仅需SomeType始终键入,而不必花更长的时间Some.Namespace.SomeType(在C ++中使用::代替.)。出于同样的目的,危险对我来说似乎也一样:命名碰撞。 在最佳情况下,这会导致编译错误,因此您“仅”必须进行修复。在最坏的情况下,它仍然会编译,并且代码会静默地执行与您预期的不同的操作。所以我的问题是:为什么(显然)使用的指令在C#和C ++中被认为是同等糟糕的? 我有一些答案的想法(尽管这些想法都没有真正让我满意): 命名空间趋向于更长和更嵌套在C#比在C ++(std对比System.Collection.Generic)。因此,以这种方式对代码进行降噪会有更多的愿望和收获。但是,即使这是真的,该参数也仅在我们查看标准名称空间时适用。自定义名称可以在C#和C ++中具有您喜欢的任何短名称。 在C#中,命名空间似乎比在C ++中更“精细”。举个例子,在C ++整个标准库包含在std(加上一些微小的嵌套的命名空间一样chrono),而在C#中你有System.IO,System.Threading,System.Text等,所以,其命名冲突的风险较小。但是,这只是一种直觉。实际上,我没有计算您使用using namespace std和导入的名称using System。同样,即使这是正确的,此参数也仅在查看标准名称空间时适用。您可以在C#和C ++中将自己的代码设计为细粒度。 还有更多争论吗?我对实际的硬事实(如果有的话)特别感兴趣,而对观点却不太感兴趣。