2011-01-19 68 views

回答

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

+0

所以你說``::僅與命名空間的作品,而`.`與除一切正常`global`? – Mehrdad 2011-01-19 04:22:40

+0

是的,::僅用於名稱空間的事實意味着您可以使用它來解決無法解決的歧義。 – 2011-01-19 04:25:55

6

::運算只適用於全球的別名是別名提供一個特殊的系統的例子。

所以......這個工程:

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