C#学习笔记(三十二)-- ::运算符和全局名称空间限定符

    ::运算符提供了另一种访问名称空间中的类型的方式。如果要使用一个名称空间的别名。但该别名与实际名称空间层次结构之间的界限并不清晰,就必须使用::运算符。在那种情况下,名称空间层次结构优先于名称空间的别名。为阐明其含义,考虑下列代码:

using MyNamespaceAlices = MyRootNamespace.MyNestedNamespace;
namespace MyRootNamespace
{
   namespace MyNamespaceAlices
   {
      public class MyClass()
   }
   namespace MyNestedNamespace
   {
      public class MyClass()
   }
}

    MyRootNamespace中的代码使用以下代码引用一个类:

MyNamespaceAlices.MyClass

    这行代码引用的类是MyRootNamespace.MyNamespaceAlices.MyClass,而不是MyRootNamespace.MyNestedNamespace.MyClass。也就是说,MyRootName-space.MyNamespaceAlices名称空间隐藏了由using语句定义的别名,该别名引用MyRootNamespace.MyNestedNamespace名称空间。仍然可以访问这个名称空间以及其中包含的类,但需要使用不同的语法:

MyNestedNamespace.MyClass

    另外,还可以使用::运算符:

MyNamespaceAlias::MyClass

    使用这个运算符会迫使编译器使用由using语句定义的别名,因此代码引用MyRootName-space.MyNestedNamespace.MyClass。

    ::运算符还可以与global关键字一起使用,它实际上是顶级根名称空间的别名。这有助于更清晰地说明要引用哪个名称空间,如下所示:

global::System.Collections.Generic.List<int>

    这是希望使用的类,即List<T>泛型集合类。

    当然,应避免使名称空间的名称与已有的.Net名称空间相同,但这个问题只在大型项目中才会出现,作为大型开发队伍中的一员进行开发时,此类问题尤其严重。使用::运算符和global关键字可能是访问所需类型的唯一方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值