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

时间:2011-01-19 03:37:11

标签: c# operator-keyword scope-resolution

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

2 个答案:

答案 0 :(得分:6)

::运算符仅适用于别名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 info here

答案 1 :(得分:5)

with ::你可以做像...这样的事情。

 extern alias X;
 extern alias Y;
 class Test
 {
   X::N.A a;
   X::N.B b1;
   Y::N.B b2;
   Y::N.C 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