C#|::運算子和全域性名稱空間
阿新 • • 發佈:2021-09-28
發現 C# 還要和 C++ 一樣的::
運算子,來測試一下。
名稱空間被賦值別名以後,可以隱藏掉原有的名稱空間。想要訪問需要完整路徑。如果不用,可以用::
運演算法,它的優先順序被高。
看下下面的例子:
using System; namespace ConsoleApp1 { // 同名的別名空間 using MyNamespaceAlias = MyRootNamespace.MyNestedNamespace; namespace MyRootNamespace { namespace MyNamespaceAlias { public class MyClass { public static void Print() { Console.WriteLine("MyRootNamespace.MyNamespaceAlias.MyClass.Print()"); } } } namespace MyNestedNamespace { public class MyClass { public static void Print() { Console.WriteLine("MyRootNamespace.MyNestedNamespace.MyClass.Print()"); } } } class Program { static void Main(string[] args) { MyRootNamespace.MyNestedNamespace.MyClass.Print(); // 可簡化名稱如下 MyRootNamespace.MyNamespaceAlias.MyClass.Print(); // 原有的 MyNamespaceAlias 名稱空間遮蔽了別名空間。 // 使用::運算子,迫使編譯器使用別名 MyNamespaceAlias::MyClass.Print(); // MyRootNamespace. MyNamespaceAlias::MyClass.Print(); // 這樣會報錯不行,原因是顯然的,::指向別名。 Console.ReadKey(); } } } }
對照輸出順序就,結合程式碼註釋,可以看出區別:
MyRootNamespace.MyNestedNamespace.MyClass.Print()
MyRootNamespace.MyNamespaceAlias.MyClass.Print()
MyRootNamespace.MyNestedNamespace.MyClass.Print()
這種方式在大專案出現別名和.NET
名稱空間重名的時候有用,一般用不上吧?!
global
是頂級根名稱空間的別名,如果出現上面所說的那種情況,可以這樣:
global::System.Collections.Generic.List<int> // 一個示例
參考:
《C#入門經典第三版》P305