范围解析运算符::与成员访问运算符。 在C#中

在C#中, A::BAB什么区别? 我注意到的唯一区别是只有::可以与global一起使用,但除此之外,有什么区别? 为什么它们都存在?

与::你可以做的事情……

  extern alias X; extern alias Y; class Test { X::NA a; X::NB b1; Y::NB b2; Y::NC c; } 

而且有时候。 是不明确的所以::是需要的。 这是C#语言规范的例子

 namespace N { public class A {} public class B {} } namespace N { using A = System.IO; class X { A.Stream s1; // Error, A is ambiguous A::Stream s2; // Ok } } 

http://download.microsoft.com/download/0/B/D/0BDA894F-2CCD-4C2C-B5A7-4EB1171962E5/CSharp%20Language%20Specification.htm

::运算符仅适用于别名global是一个特殊系统提供的别名。

所以……这有效:

 using Foo = System.ComponentModel; public MyClass { private Foo::SomeClassFromSystemComponentModel X; } 

但不是这个:

 public MyClass { private System.ComponentModel::SomeClassFromSystemComponentModel X; } 

这使您可以摆脱在与它们具有的库集成时可能出现的子命名空间的地狱:

 namespace MyAwesomeProduct.System { } 

你代码中有你

 using MyAwesomeProduct; 

global ::让你找到真正的系统。

MSDN信息在这里