:: 的含义是什么?

4

正如标题所说,我认为我之前看过一些C#代码时看到了这个符号,但是我并没有太在意它的含义。那么在C#中,::是什么意思呢?我想我曾经看到过类似于myVar::Process.Start()的东西。


1
http://msdn.microsoft.com/en-us/library/htccxtad - mellamokb
1
如果你有一个与你想要使用的属性同名的方法或属性,就可以使用它。比如说,你有一个命名空间 Taylor 和一个叫做 Console 的方法。使用 :: 你可以指定要搜索的命名空间,例如全局搜索 ConsoleSystem 级别而不是在 Taylor.Console 上。 - plast1K
3个回答

12

这是命名空间别名限定符,如果你使用了命名空间别名:

using config = System.Configuration;

...

var value = config::ConfigurationManager.AppSettings["Somthing"];

当你在同一作用域内有相同名称的类型时,它可以帮助消除歧义。

例如 - 如果你有几个Leg类(一个用于家具,一个用于旅行中的腿),并且两者都在导入的命名空间中,结果是当你在代码中使用Leg时编译器无法确定你指的是哪一个,那么如果你有一个命名空间别名到这些命名空间,你可以使用<alias>::Leg来引用你所需的确切类型。

对于全局命名空间,有一个默认的别名global


谢谢,你解决了我的问题。我会尽快将你标记为答案。 - user1462199
请注意,如果名称没有冲突,并且您对命名空间使用了using别名,就像上面一样,那么说config::ConfigurationManagerconfig.ConfigurationManager是等效的。因此,在这种情况下,这是一个偏好问题。如果您对类型(比如类)使用别名,则永远不能使用::运算符。 - Jeppe Stig Nielsen
@FranciscoCorrales - 如果你有关于Python的问题,应该询问有关Python的问题。这个问题标记为C# - 我为什么要在一个关于C#的问题上回答我不熟悉的Python问题呢? - Oded
@FranciscoCorrales - 不要通过评论来发送垃圾信息。被问题屏蔽并不代表这样做是正确的。 - Oded

9

1

如果您在较低的命名空间中有一个与另一个同名的方法或属性,则可以使用::。例如:

namespace Taylor 
{ 
 public Console {get; set;}
}

那么假设你想要使用 Console.WriteLine();

如果不使用 global::System.Console.WriteLine();,它默认使用 Taylor.Console,因为它指向 this

它基本上使其在命名空间之间区分出一个你指定的;最常见的是:全局(最低级别)。

这个示例有点多余,因为 System.Console 会指向它。查看 Oded 的示例可以让您了解如何同时动态地使用 ::


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接