global ::用于冲突的命名空间

Jam*_* M. 9 c# namespaces

根据我的理解,global::限定符允许您访问已被另一个具有相同名称隐藏的命名空间.该MSDN页面使用System作为一个例子.如果您创建自己的命名空间System,则可以使用global::System.首先想到的是,为什么有人会调用他们的命名空间System?该页面继续说这显然不推荐,但在大型项目中很可能使用命名空间重复.如果/何时发生这种情况,是否表明事情正朝着错误的方向前进,或者是否有正当理由存在冲突的命名空间?

Ada*_*son 13

通常,global::用于表示"我想从名称空间结构的顶部开始".如果我有一个名为的名称空间MyProduct.System,那么驻留在MyProduct名称空间中的任何内容都将无法访问Microsoft System名称空间.这是代码味道吗?也许有时候,但不是特别臭.


use*_*116 7

任何机器生成的代码都应该尝试使用global::,以尽量减少它可能不知道的命名空间冲突的可能性.此外,任何可能遇到冲突的代码都可以使用它来更具体.


Mus*_*sis 7

存在冲突命名空间的一个合理原因可能是使用为早期版本的.Net编写的内部库,这些库不包含在以后版本中添加的功能.例如,在.Net 1.1天中,我编写了一个包含API注册表调用的Registry类.通过纯粹的机会,我选择的方法名称与后来的.Net Registry类中的方法名称完全相同,并且它们完全相同,因此很容易拔掉我自己开发的代码.对于更复杂的东西,能够使用较旧的,命名不佳的代码块与global::限定符可能是有用的.

但是,使用现有的.Net命名空间故意命名一段新代码肯定会产生代码味道.