在C#中使用System;与在C++中使用namespace std;的区别是什么?

11
为什么在C++中,using namespace std;被认为是不好的做法,而在C#中using System;却被认为是好的做法?它们似乎是类似的(将标准库内容引入全局命名空间)。

2
谁说在C#中这是好的实践? - Ben
1
我认为在实现文件中使用 using namespace std; 是可以的,只要避免在头文件中使用即可。然而,还有更好、更明确的替代方案,比如使用 using std::cout; - Suedocode
可能是为什么"using namespace std;"被认为是不良实践?的重复问题。 - Deduplicator
MonoDevelop 会自动将它包含在任何 C# 文件的第一行。 - Demi
3
@Aggieboy 我认为在实现文件中也不应该“fine”(除非在有限的范围内)。 - juanchopanza
显示剩余2条评论
2个回答

19

在C#中,using指令只会影响它所处的文件或命名空间范围。

如果你在一个C++头文件中包含using namespace std;,它不仅会影响该文件,还会影响每个包含该文件的文件。这可能导致其他人的文件出现冲突。

尽管在C#中使用这种方式可能不是最佳实践,但它的风险远远低于在C++中使用,因为它只会影响指令所放置的文件或命名空间范围。


2
OP在哪里提到将其放入头文件中?应该为实现文件添加一些参数... - Deduplicator

3

因为C#没有独立的函数。

C++中使用using namespace std的问题在于编译器突然决定调用std::函数而不是你的函数,这并不奇怪,因为像countdistancefind这样的名称都是模板函数,可以接受几乎任何东西。

在C#中,这个问题要少得多,因为C#没有独立的函数,并且它具有更严格的隐式转换(例如,你不能将一个int传递给一个期望指针的函数)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接