为什么要使用完全合格的名字?

时间:2012-11-26 16:48:30

标签: c# .net vb.net namespaces

自引入var关键字以来,您为什么要使用为什么要使用完全限定的名称?

var有效地减少了变量声明的输入。因此,可以保持完整的声明而不会使代码膨胀。这让我很奇怪,为什么你甚至想宣布namespace用法?

// A lot of typing, but unambiguous.
System.Drawing.Point a = new System.Drawing.Point();

// using System.Drawing, Point possibly ambiguous.
Point b = new Point();

// using System.Drawing, Point possibly ambiguous.
var c = new Point();

// Less typing, still unambiguous.
var d = new System.Drawing.Point();

这里的最佳做法是什么?

5 个答案:

答案 0 :(得分:13)

命名空间只有几个原因才真正有用:

  1. 帮助区分具有相同名称的班级
  2. 帮助将项目“组织”成有意义的作品
  3. 正如Oded所说,仅仅这些原因非常重要 - 虽然不常见,但模糊不是不可能的,在这种情况下使用名称空间是必要的。

    详细了解名称空间here

答案 1 :(得分:8)

这似乎更少关于命名空间,更多关于在代码中使用静态类型。我听说不使用var的主要论点延伸到通过浏览声明时变量类型不明显的时候。请考虑以下代码:

var readyTasks = _config.GetTasks().Where(x => x.Ready);

你究竟怎么知道readyTasks是什么? IEnumerable是一个给定的,考虑到Where()返回的内容,但除此之外,获取此类型的唯一方法是将鼠标悬停在var上,让Visual Studio为您解决问题。随着LINQ语句变得越来越长,这变得更加复杂,可以将枚举变为逻辑结构,例如foreach循环,列表一直在继续。

var(我是其中之一)的支持者会反驳说,从长远来看,var为你产生的麻烦要少得多。静态类型声明从来都不是程序员舒适性的考虑因素。它们首先是编译器。因此,仅仅因为你已经习惯了这个神器似乎没有意义。

答案 2 :(得分:3)

我认为您的问题实际上是为什么要使用完全限定名称?而不是为什么要使用命名空间?

命名空间在任何Object Oriented语言中都非常重要。如果你有2个具有相同名称的类(在.NET框架中已经经常发生),你应该如何区分它们?这就是命名空间的要点 - 如果在同一命名空间中有2个具有相同名称的类,则代码将无法编译。 (当然,除非他们是部分课程,这是一个完全不同的故事)。

我经常遇到的一个例子是List。我们在这里的几个项目中使用了NHibernate,它有自己的List。如果我正在实例化List,我不能这样做:

var list = new List<string>();

..因为编译器不知道我是否需要NHibernate.Mapping.ListSystem.Collections.Generic.List

var关键字对type inference非常有用,但如果您在另一端没有正确的using语句或Fully Qualified名称,则无效。

答案 3 :(得分:1)

使用命名空间 1.定义范围
2.在不同的名称空间/项目/程序集中区分相同的类名。

无论如何,var的用法都没有链接到命名空间。命名空间别名可以减少输入。

Using Namespaces

答案 4 :(得分:1)

对于一次性测试应用程序(例如检查Stack Overflow答案),我不使用命名空间。除此之外,我做到了。这只是一个组织事物 - 如果你要重用代码,将它与你在同一个环境中重用的其他代码分开是有帮助的。我的意思是,如果您使用LibraryX和LibraryY创建应用程序,那么能够在应用程序中区分它们是有用的。例如,它们可能都使用相同的类名 - 如果不使用名称空间,这将使代码变得丑陋。

除此之外,如果您使用Visual Studio进行编码,实际上更多的工作就是不要包含命名空间 - 您必须修改项目以使其为空的默认命名空间。

有关命名的信息,请参阅:Namespace Naming Convention