【问题标题】:Automatically added Using directive in C #在 C# 中自动添加 Using 指令
【发布时间】:2015-05-18 10:29:05
【问题描述】:

在使用Visual Studio Express创建控制台C#应用程序时,我发现在开始的代码顶部会自动添加一些命名空间:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

我的理解是第一个指令应该允许我使用 System 中定义的东西,其余三个指令用于在第一个指令中已经提到的整个 System 命名空间中定义的命名空间。那么为什么 VS 2013 添加其余三个 using 指令?

【问题讨论】:

  • using 指令仅用于一层。因此,using System 不会让您访问 System.Text 等中的课程。
  • 这是四个不同的命名空间。

标签: c#


【解决方案1】:

您误解了命名空间的工作原理。

例如,假设我可以在两个单独的命名空间中定义两个类:

namespace MyNamespace
{
    public class One
    {

    }
}

namespace MyNameSpace.SubNameSpace
{
    public class Two
    {

    }
}

然后我想在另一个类中创建每个实例,如下所示:

var one = new One();
var two = new Two();

我必须包含两个 using 指令才能做到这一点。

using MyNamespace;
using MyNameSpace.SubNameSpace;

只包含第一个using 指令是不够的;它不会自动包含在第二个命名空间中定义的类。

【讨论】:

  • 那为什么不定义一个名为 SubNameSpace 的新命名空间呢?添加“。”的目的是什么?服务?
  • @kk_139 这可以防止在第 3 方 lib/dll 启动时发生名称冲突。例如公司 ABC 和公司 XYZ 可以定义它们唯一的命名空间前缀,例如 ABC.SubNamespaceXYZ.SubNamespace
【解决方案2】:

使用系统不会自动包含子命名空间中的所有内容。第一个命名空间(系统)没有引入以下三个。

【讨论】:

    【解决方案3】:

    我认为查看命名空间的方式是“。”只是名称中的另一个字符,它使人们更容易理解相关命名空间的层次结构,就 Visual Studio 而言,它们是两个不同的命名空间。

    【讨论】:

    • 就 .NET 而言,是的,但 C# 允许您使用嵌套命名空间语句创建中间带有点的命名空间名称。
    【解决方案4】:

    你可以这样对待

    namespace System {
    
    //... stuff
         namespace Linq {
         }
    ...
    
    }
    

    System 的命名空间与 System.linq 的命名空间不同。第一行将允许您使用System.Console。但是仅第一行就不允许您使用命名空间System.Linq 中的方法。

    【讨论】:

      猜你喜欢
      • 2020-08-31
      • 1970-01-01
      • 2012-09-13
      • 2018-01-06
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 2010-10-13
      相关资源
      最近更新 更多