什麼是做用域(scope)?簡單來講,是變量在程序中的起做用範圍。通常來講,一個變量只有在特定的區域內是有意義的,那麼,限定這個變量的有效區域的代碼範圍就是這個變量的做用域。做用域的使用可以減小名字衝突,即在不一樣的做用域能夠存在相同名字的變量。在C#中,變量的做用域在他所處的最近的一對花括號內。還有一個被稱做全局做用域的,它的範圍夠覆蓋能建立的新文件的所有上下文。編程
做用域運算符:「::」一般狀況下,調用變量的時候,最早調用的是距離最近的當前做用域的變量。即,做用域越小優先級越高。若是但願在局部變量的做用域內使用同名的全局變量,能夠在該變量前加上「::」 ,「::」稱爲做用域運算符。若是有兩個同名變量,一個是全局變量,另外一個是局部變量,那麼局部變量在其做用域內具備較高的優先權,它將屏蔽全局變量。因此,做用域運算符能夠用來解決局部變量與全局變量的重名問題,即在局部變量的做用域內,可用::對被屏蔽的同名的全局變量進行訪問。ide
例如,在下面的代碼中,Console 解析爲 TestApp.Console 而不是 System 命名空間中的 Console 類型。ui
using System; namespace Test { class TestApp { //定義一個名爲「System」的新類來引起問題。 public class System { } //定義一個名爲「Console」的常量以引起更多問題。 const int Console = 7; const int number = 66; static void Main() => //如下行致使錯誤。 它訪問TestApp.Console, //這是一個常數。 //Console.WriteLine(); //使用 System.Console 仍會致使錯誤,由於類 TestApp.System 隱藏了 System 命名空間: // 如下行致使錯誤。 它訪問TestApp.System,沒有Console.WriteLine方法。 //System.Console.WriteLine(number); //可是,可使用 global::System.Console 解決此錯誤,以下所示: // OK global::System.Console.WriteLine(number); }
顯然,不建議將本身的命名空間的名稱建立爲 System,而且不可能會遇到發生此狀況的代碼。 可是,在大型項目中,頗有可能會以一種或另外一種形式發生命名空間重複。 在這些狀況下,全局命名空間限定符可保證指定根命名空間。spa
參考:如何:使用全局命名空間別名(C# 編程指南)code