什么是做用域(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