9

我正在学习 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 教程。

** 我想知道为什么这无关紧要,以便我更好地理解它?**

4

3 回答 3

10

有区别,小但有。

这都是关于编译器进行名称解析的顺序。您可以在这里找到关于主题的好答案:

Usings 应该在命名空间内部还是外部

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

于 2013-04-08T06:51:29.220 回答
5

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

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

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

这就是变量名称的范围仅适用于包含它们的最内层大括号的一种方式。

于 2013-04-08T06:51:27.250 回答
-1

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

文件 1:

namespace MyNamespace
{
    using System;
    using System.IO;

    public MyClass
    {
    }
}

文件 2:

namespace MyNamespace
{
    public MyClassV2
    {
    }
}

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

于 2013-04-08T07:04:18.910 回答