3

既然引入了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();

这里的最佳做法是什么?

4

5 回答 5

13

命名空间真正有用的原因有以下几个:

  1. 帮助区分同名的类
  2. 帮助将项目“结构化”成有意义的部分

正如 Oded 所提到的,仅这些原因就非常重要——尽管不常见,但歧义并非不可能,在这种情况下,使用命名空间将是必要的。

在此处了解有关名称空间的更多信息。

于 2012-11-26T16:49:40.757 回答
9

这似乎与名称空间无关,而与在代码中使用静态类型有关。我听到的关于不使用var扩展的主要论点是当变量类型通过查看声明时不明显时。考虑以下代码:

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

你到底怎么知道readyTasks是什么? IEnumerable考虑到Where()返回的内容,这是给定的,但除此之外,摆脱这种类型的唯一方法是将鼠标悬停var并让 Visual Studio 为您找出它。这变得更加复杂,因为 LINQ 语句变得更长,可枚举对象被插入到foreach循环等逻辑结构中,列表不断增加。

(我就是其中之一)的支持者会反驳说,从长远来看var,这是一件小事,可以为您带来更少的麻烦。var静态类型声明从来都不是程序员舒适度的考虑因素。它们首先适用于编译器。因此,仅仅因为你已经习惯了就持有这个神器似乎没有任何意义。

于 2012-11-26T16:59:50.853 回答
3

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

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

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

var list = new List<string>();

.. 因为编译器不知道我是想要 aNHibernate.Mapping.List还是System.Collections.Generic.List.

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

于 2012-11-26T16:59:07.157 回答
1

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

var 的使用无论如何都没有链接到命名空间。命名空间别名处理的类型更少。

使用命名空间

于 2012-11-26T16:56:59.390 回答
1

对于一次性测试应用程序(例如检查堆栈溢出答案),我不使用命名空间。对于其他任何事情,我都愿意。这只是一个组织的事情 - 如果您要重用代码,将它与您也在同一上下文中重用的其他代码分开会很有帮助。我的意思是,如果您正在使用 LibraryX 和 LibraryY 创建应用程序,那么能够在应用程序中区分它们是很有用的。例如,它们可能都使用相同的类名 - 如果您不使用命名空间,这将使代码变得丑陋。

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

有关命名的信息,请参阅:命名空间命名约定

于 2012-11-26T17:05:11.207 回答