正如标题所说,我认为我之前看过一些C#代码时看到了这个符号,但是我并没有太在意它的含义。那么在C#中,::
是什么意思呢?我想我曾经看到过类似于myVar::Process.Start()
的东西。
正如标题所说,我认为我之前看过一些C#代码时看到了这个符号,但是我并没有太在意它的含义。那么在C#中,::
是什么意思呢?我想我曾经看到过类似于myVar::Process.Start()
的东西。
这是命名空间别名限定符,如果你使用了命名空间别名:
using config = System.Configuration;
...
var value = config::ConfigurationManager.AppSettings["Somthing"];
当你在同一作用域内有相同名称的类型时,它可以帮助消除歧义。
例如 - 如果你有几个Leg
类(一个用于家具,一个用于旅行中的腿),并且两者都在导入的命名空间中,结果是当你在代码中使用Leg
时编译器无法确定你指的是哪一个,那么如果你有一个命名空间别名到这些命名空间,你可以使用<alias>::Leg
来引用你所需的确切类型。
对于全局命名空间,有一个默认的别名global
。
using
别名,就像上面一样,那么说config::ConfigurationManager
和config.ConfigurationManager
是等效的。因此,在这种情况下,这是一个偏好问题。如果您对类型(比如类)使用别名,则永远不能使用::
运算符。 - Jeppe Stig Nielsen在文档中有介绍:
命名空间别名限定符(::)用于查找标识符。它总是放置在两个标识符之间,例如:
global::System.Console.WriteLine("Hello World");
如何使用命名空间别名限定符(C#编程指南)也许会有帮助。
如果您在较低的命名空间中有一个与另一个同名的方法或属性,则可以使用::。例如:
namespace Taylor
{
public Console {get; set;}
}
那么假设你想要使用 Console.WriteLine();
如果不使用 global::System.Console.WriteLine();
,它默认使用 Taylor.Console
,因为它指向 this
它基本上使其在命名空间之间区分出一个你指定的;最常见的是:全局
(最低级别)。
这个示例有点多余,因为 System.Console 会指向它。查看 Oded 的示例可以让您了解如何同时动态地使用 ::
。