C# ::運(yùn)算符和全局名稱空間限定符
::運(yùn)算符提供了另一種訪問(wèn)名稱空間中類型的方式。如果要使用一個(gè)名稱空間的別名,但該別名與實(shí)際名稱空間層次結(jié)構(gòu)之間的界限不清晰,就必須使用::運(yùn)算符。在那種情況下,名稱空間層次結(jié)構(gòu)優(yōu)先于名稱空間別名。為闡明其含義,考慮下列代碼:
using MyNamespaceAlias = MyRootNamespace.MyNestedNamespace;
namespace MyRootNamespace
{
namespace MyNamespaceAlias
{
public class MyClass {}
}
namespace MyNestedNamespace
{
public class MyClass {}
}
}
MyRootNamespace中的代碼使用以下代碼引用一個(gè)類:
MyNamespaceAlias.MyClass
這行代碼引用的類是 M>RootNamespace.MyNamespaceAlias.MyClass,而不是 MyRootNamespace.MyNested-Namespace.MyClass。也就是說(shuō),MyRootNamespace.MyNamespaceAlias 名稱空間隱藏了由 using 語(yǔ)句定義的別名,該別名引用MyRootNamespace. MyNestedNamespace名稱空間。仍然可以訪問(wèn)這個(gè)名稱空間以及其中包含的類,但需要使用不同的語(yǔ)法:
MyNestedNamespace.MyClass
另外,還可以使用::運(yùn)算符:
MyNamespaceAlias::MyClass
使用這個(gè)運(yùn)算符會(huì)迫使編譯器使用由using語(yǔ)句定義的別名,因此代碼引用MyRootNamespace.MyNestedNamespace.MyClass。
二運(yùn)算符還可以與global關(guān)鍵字一起使用,它實(shí)際上是頂級(jí)根名稱空間的別名。這有助于更清晰地說(shuō)明要引用哪個(gè)名稱空間,如下所示:
global::System.Collections.Generic,List<int>
這是希望使用的類,即List<TV泛型集合類。它肯定不是用下列代碼定義的類:
namespace MyRootNamespace
{
namespace System
{
namespace Collections
{
namespace Generic
{
class List<T> {}
}
}
}
}
當(dāng)然,應(yīng)避免使名稱空間的名稱與己有的.NET名稱空間相同,但這個(gè)問(wèn)題只在大型項(xiàng)目中才會(huì)出現(xiàn),作為大型開(kāi)發(fā)隊(duì)伍中的一員進(jìn)行開(kāi)發(fā)時(shí),此類問(wèn)題尤其嚴(yán)重。使用::運(yùn)算符和global關(guān)鍵字可能是訪問(wèn)所需類型的唯一方式。
點(diǎn)擊加載更多評(píng)論>>