使用::和键入完全限定的命名空间有什么区别?

时间:2012-08-12 21:06:23

标签: c# .net

我最近问过一个问题:What Does :: Mean?

然后今天,当然我遇到了那个确切的问题。我认为我正在使用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();

我希望这很清楚,我只想知道为什么使用::当你只需输入命名空间时,只是为了保存输入,你有很多嵌套的命名空间吗?

5 个答案:

答案 0 :(得分:2)

如果有很多场景,

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

关键用途是在代码生成中,引用global :: System.w可以节省尴尬,特别是在有人选择调用类型/嵌套类型/属性System的情况下。 - 在这种情况下System.Whatever不再引用你的预期,但global :: System.Whatever

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

答案 1 :(得分:1)

不是差异,它是使用碰撞类型的方式

如果您使用某种类型

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

开始使用其他具有

的项目
namepsace His.System.Pro
{
   public class Project{}
}

两种类型Project处于冲突状态,因此无需编写完全限定名称,您可以将别名分配给yuor和/或命名空间。对于编码风格来说,这只是为了舒适。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

他们生成相同的代码,但别名是懒惰的电源开发者知道它存在并且不想经历编写所有那些长限定符的麻烦。

编辑:我个人更喜欢长限定符,因为别名会使代码难以跟踪。它是yo-yo problem

的源代码版本

答案 4 :(得分:0)

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