1

我最近问了一个问题::: 是什么意思?

然后今天,我当然遇到了那个确切的问题。我想我正在使用 System.Timers 和 System.Threading 命名空间。据我所知,他们都有一个名为 Timer 的类。现在这无关紧要,我想知道的是以下之间的区别:

Using myalias = System.Timers;
myalias::Timer myTimer = new myalias::Timer();

Using System.Timers;
System.Timers.Timer myTimer = new System.Timers.Timer();

我希望这已经足够清楚了,我只是想知道为什么使用 :: 当你可以输入命名空间时只是为了节省输入以防你有很多嵌套的命名空间?

4

5 回答 5

2

:: 在多种情况下变得有用。保存输入只是其中之一,实际上在大多数情况下,完全限定名称就足够了。

一个关键用途是在代码生成中,引用 global::System.whatever 可以避免尴尬,特别是在有人选择调用类型/嵌套类型/属性System的情况下 - 在这种情况下 System.Whatever 没有更长是指您期望的,但 global::System.Whatever does

一个更微妙的:考虑两个库,a.dll 和 b.dll - 由于某种原因,它们都包含 Foo.Bar.SomeType - 在这里,我们可以使用“外部别名”来分别讨论这两种类型,通过不同的顶部级别名(而不是 global::) 来命名它们。

于 2012-08-12T21:16:41.210 回答
1

It's not about difference, it's a way of using the types that are in collision.

If you use some type

namepsace My.System.Pro
{
   public class Project{}
}

begin to use some other project that has

namepsace His.System.Pro
{
   public class Project{}
}

Two types Project are in collision, so istead of writing fully qualified name, you assign a alias to yuor, and/or to his namespace. This is just for comfort, for coding style.

于 2012-08-12T21:11:51.590 回答
0

它们产生相同的代码,但别名是为那些知道它存在并且不想费心编写所有这些长限定符的懒惰的开发者准备的。

编辑:我个人更喜欢长限定符,因为别名使代码难以跟踪。是溜溜球问题的源码版本

于 2012-08-12T21:17:21.543 回答
0

别名只是缩短完全限定版本的一种方式。哪个更好是可读性的问题。通常,完全限定类型占用的空间比它们需要的要多,因此通常首选指定类型的紧凑方式。

于 2012-08-12T21:17:34.063 回答
0

两者都会产生相同的底层代码,问题是代码的可读性

于 2012-08-12T21:14:04.763 回答