关于c#:将命令放在命名空间的内部或外部?

Place Usings inside or outside of namespace?

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
9
10
11
12
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
    {}

我们通常做的是在开始时像这样添加资源范围:

1
2
3
4
5
6
7
8
9
10
11
12
13
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教程。

**我想知道的是,为什么这件事无关紧要,以便更好地了解它?**


有一点不同,虽然很小,但确实存在。

这都是关于编译器的名称解析序列。你可以在这里找到关于这个问题的好答案:

using应该在命名空间内部或外部

在第一种编译器的实践中,如果不能立即找到类型信息,在using中声明的名称空间中进行搜索。相反,在第二种情况下,将首先在实际名称空间中进行搜索,然后只在声明的外部内部进行搜索。


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

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

将它们放在名称空间之外意味着它们应用于文件中的所有名称空间。

变量名的作用域只应用于包含变量名的最内部大括号中,而且更深层。


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

文件1:

1
2
3
4
5
6
7
8
9
namespace MyNamespace
{
    using System;
    using System.IO;

    public MyClass
    {
    }
}

文件2:

1
2
3
4
5
6
namespace MyNamespace
{
    public MyClassV2
    {
    }
}

在这个例子中,您不需要在文件2中为myClassv2添加using,因为myNamespace已经有了这些using语句。但是对于不同的名称空间,您需要添加using语句。