7

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

4

2 回答 2

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信息在这里

于 2011-01-19T04:13:12.207 回答
5

与 :: 你可以做类似...

 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

于 2011-01-19T04:10:12.117 回答