将命令放在命名空间的内部或外部?

时间:2013-04-08 06:49:13

标签: c# coding-style namespaces

我正在学习MVC WebAPI,我正在学习一个教程,一切都很顺利,直到我看到以下内容:

namespace HelloWebAPI.Controllers
{
    using HelloWebAPI.Models;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Web.Http;

    public class ProductsController : ApiController
    {}

我们通常做的是在开头添加资源\范围,如下所示:

using HelloWebAPI.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace HelloWebAPI.Controllers
{

    public class ProductsController : ApiController
    {}

我的主管告诉我它没关系,应该没问题,因为它是关于这个主题的官方MS教程。

**我想知道为什么这不重要,以便我对它有更好的理解? **

3 个答案:

答案 0 :(得分:8)

有区别,小但有。

这完全是关于编译器所做的名称解析的顺序。 你可以在这里找到关于主题的好答案:

Should Usings be inside or outside the namespace

在第一种情况编译器的实践中,万一无法立即找到类型信息, 将搜索在 using内声明的名称空间。在第二种情况下,相反,将首先在实际名称空间中搜索,之后仅搜索在声明的外部内搜索。

答案 1 :(得分:4)

您可以在C#文件中定义多个命名空间。

using语句放在命名空间中意味着它们仅在该文件的该命名空间中使用。

将它们放在命名空间之外意味着它们会申请文件中的所有命名空间。

变量名称的范围仅适用于包含它们且更深的大多数内括号。

答案 2 :(得分:0)

唯一的区别在于使用语句的范围。如果在命名空间内使用,则这些using语句将包含在该命名空间下的所有文件中。如果在命名空间之外使用using语句,则这些using语句仅对当前文件有效。

文件1:

namespace MyNamespace
{
    using System;
    using System.IO;

    public MyClass
    {
    }
}

文件2:

namespace MyNamespace
{
    public MyClassV2
    {
    }
}

在此示例中,您不需要在文件2中为MyClassV2添加使用,因为MyNamespace已经具有这些using语句。但是对于不同的命名空间,您需要添加using语句。