C#中的命名空间冲突

51

在我的程序命名空间中有一个System命名空间。因此,我无法从我的命名空间中看到标准的System命名空间。我该如何解决这个问题?

进入图像描述

例如,在C++中有::操作符,可以将我从当前命名空间中“移出”,这样我就可以看到与我的当前命名空间同名的外部命名空间:

进入图像描述

C#中是否有类似的操作符?


可能是重复的问题:如何在C#中使命名空间别名运算符::工作?(https://dev59.com/eHRB5IYBdhLWcg3wc280) - Jarrett Meyer
3
为什么不使用更好的名称,而不是“System”? - user195488
1
抱歉打岔,但如果这些屏幕截图来自Visual Studio,你使用的是什么颜色主题? - 7wp
2
@0A0D:我只是为了举例而已 :) 我只想知道这个问题的答案 - Anton Semenov
@Roberto Sebestyen:这不是VS的颜色主题,我已经在系统外观中更改了标准白色窗口的颜色,因此所有使用SystemColors.Window颜色的程序都具有相同的灰色。这对眼睛非常好。 - Anton Semenov
同样的问题,参考 https://dev59.com/0HE85IYBdhLWcg3wKwKD - Kyle Delaney
4个回答

113

你需要使用global关键字,这将强制命名空间解析从最顶层开始。它主要用于生成的代码中,以确保正确引用了命名空间。

 global::System.Foo.Bar;

这里有一些关于它的MSDN文档:http://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx


4
顺便提一下,最好避免使用System作为命名空间的名称。 - Matt Greer
4
不幸的是,有些代码生成器不会添加 "global::" 关键字。 :-( 例如 WPF 使用的那个。 - Steven Jeuris
1
@MattGreer 我同意,但请记住,您还可能与第三方库的根命名空间发生冲突。 - Dan Bechard
方便的MSDN链接。 - Fetchez la vache

20

为了更方便,你也可以给它起一个别名:

using GSystem = global::System;

这个将允许你用 GSystem 或其他你想要的名称来引用全局的 System 命名空间。


4
是的
global::System

奇怪的是,您遇到了与系统冲突的问题。除了系统本身,没有任何东西应该声明那个命名空间...

2
他在自己的代码中声明了 NamespaceConflict.System,以进行演示。 - Dan Bechard

4

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