• C#中的双冒号是什么意思?
  • 发布于 2个月前
  • 277 热度
    2 评论
  • Oats
  • 0 粉丝 3 篇博客
  •   
C#初学者一枚,最近在学校C#时发现里面有些语法是这样写的:
global::System.Data.Linq.Mapping.DatabaseAttribute


我想问一下global后面的双冒号::是什么意思啊?哪位前辈给科普一下呗?

用户评论
  • 沉沦丑橘
  • ::运算符提供了访问名称空间的一种方式,如果要使用一个名称空间的别名,但该别名与名称空间结构之间的界限不够清晰,就需要使用::运算符,此时给出的名称空间别名优先于一般的名称空间层次结构。::运算符还可以与global关键字 一起使用,它是顶级名称空间的别名,这有助于更清晰地说明指向哪个名称空间,如下:global::System.Collecion.Generic.List<T>.这肯定是想使用的类,即<T>泛型集合类,它肯定不是下面的代码定义的类
    namespace MyRootNamespace
    {namespace System
    {
    namespace Collection
    {
    namespace Generic
    {
    class List<T>{}
    }
    }
    }
    }
    当然,在一般条件下避免使名称空间的名称与.Net的名称空间相同。
  • 2018/12/21 11:12:00 [ 0 ] [ 0 ] 回复
  • 硬盘的忧伤
  • global 是 C# 2.0 中新增的关键字,理论上说,如果代码写得好的话,根本不需要用到它。
    假设你现在写了一个类,名字叫 System。那么当你再在代码里写 System 的时候,编译器就不知道你是要指你写的 System 类还是系统的 System 命名空间,而 System 命名空间已经是根命名空间了,无法再通过完全限名来指定。在以前的 C# 版本中,这就是一个无法解决的问题。现在,可以通过
    global::System
    来表示 System 根命名空间,而用你自己的
    MyNamespace.System
    来表示自己的类。

    你这段代码应该是用Linq时系统自动生成的,微软为了保证系统的稳定性,在system前面添加global关键字来表示这边的System是指系统的System命名空间!

  • 2018/12/21 11:09:00 [ 0 ] [ 0 ] 回复