::在C#中的目的是什么?

And*_*yMM 38 c# syntax

::在生成的代码中看到了双冒号().我想知道它的目的是什么?

Mar*_*ers 49

它是命名空间别名限定符运算符.引用链接到MSDN页面:

命名空间别名限定符(::)用于查找标识符.它始终位于两个标识符之间,如下例所示:

global::System.Console.WriteLine("Hello World");
Run Code Online (Sandbox Code Playgroud)

  • 请注意,实际上任何别名名称空间都不需要它,而仅适用于全局名称空间。如果您使用任何其他别名,则可以使用常规的 c# 点语法(即 SomeAliasedAssembly.Namespace.Class.etc...) (2认同)

ito*_*son 34

这是命名空间别名限定符.当有两个不同类型具有相同名称和相同名称空间(来自不同程序集)的潜力时,可以使用它.例如,我们的ORM产品与VistaDB 3和VistaDB 4进行对话.在这两种情况下,连接类都是VistaDB.Provider.VistaDBConnection.因此,我们extern alias的VistaDB的3组件vdb3和VistaDB的4组件vdb4,现在可以消除歧义连接类为vdb3::VistaDB.Provider.VistaDBConnectionvdb4::VistaDB.Provider.VistaDBConnection.如果没有别名限定符,这些将引发"模糊引用"编译器错误.

  • 但你不能写`vdb3.VistaDB.Provider.VistaDBConnection`和`vdb4 :: VistaDB.Provider.VistaDBConnection`而不是? (5认同)
  • @AlexanderGonchiy:是的,你可以,但是如果你还有一个名为“vdb3”的*变量*,那么“vdb3.VistaDB”将尝试访问该变量的“VistaDB”属性。使用`::`,编译器知道左侧*总是*意味着是命名空间别名。但我同意,这种需要很少见。 (2认同)