位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# ::运算符和全局名称空间限定符

提问人:刘团圆发布时间:2020-12-08

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

using MyNamespaceAlias = MyRootNamespace.MyNestedNamespace; 

namespace MyRootNamespace 

{

    namespace MyNamespaceAlias 

    {

        public class MyClass {}

    }

    namespace MyNestedNamespace 

    {

        public class MyClass {}

    }

}

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

    MyNamespaceAlias.MyClass

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

    MyNestedNamespace.MyClass

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

    MyNamespaceAlias::MyClass

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

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

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

这是希望使用的类,即List<TV泛型集合类。它肯定不是用下列代码定义的类:

namespace MyRootNamespace 

{

  namespace System 

  {

    namespace Collections 

    {

      namespace Generic 

      {

        class List<T> {}

      }

    }

  }

}

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

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部