【问题标题】:namespaces: using System & using System.IO [duplicate]命名空间:使用 System & using System.IO [重复]
【发布时间】:2013-12-20 22:15:29
【问题描述】:

所以我的程序开头有这两行

using System;
using System.IO;

问题:第二条语句是否真的需要在我的代码中包含 Sytem.IO 方法和属性? 似乎“System.IO”是命名空间“System”的“孩子”。第一行不应该也获取所有子命名空间吗?还是我没有正确理解命名空间?

【问题讨论】:

  • 如果 System.IO 是一个单独的命名空间,为什么不直接称它为“IO”?
  • Resharper 将帮助您了解它的必要性
  • 例如,还可能有一个名为 External.IO 的命名空间。所以你需要完整的规范来识别命名空间。
  • 可以说System.IO继承自System吗?那么我想这会有意义
  • @LoganBender 不,没有继承。命名空间是相关类的逻辑分组,不反映继承的物理层次结构。

标签: c# namespaces


【解决方案1】:

System.IO 命名空间用于Input Output 操作。(例如:File 操作)

System 命名空间不包括所有子命名空间。
所以如果你想执行IO操作你应该包含System.IO命名空间explicitly

第一个问题:第二个语句是否真的有必要 在我的代码中包含 Sytem.IO 方法和属性?

是的这是必需的,因为 System 命名空间不包括 Child 命名空间。

第二个问题:'System.IO' 似乎是 命名空间“系统”。

System.IOSystem 命名空间的子级。

注意:虽然System.IOSystem的子namspace,但是当你包含System namspace时它不会被包含进来

第三个问题:第一行不应该抓住所有的孩子吗 命名空间也是?还是我没有正确理解命名空间?

第一行 using System; 没有抓取所有子命名空间,因为它不是 javaimport 所有 child namspeaces 使用通配符星 *

【讨论】:

    【解决方案2】:

    C# 不像 java,你可以使用通配符来导入命名空间。

    using System;
    

    在C#中不一样

    import system.*;
    

    在 Java 中。

    这就是它的全部内容。您需要明确包含命名空间 - 无需多言 :)

    【讨论】:

      【解决方案3】:

      第一行不应该也获取所有子命名空间吗?还是我没有正确理解命名空间?

      不 - 它只会为System 命名空间中的类型创建别名直接。 “嵌套”命名空间(例如 System.IO)在 C# 中不会自动生成别名。 the help for the using directive 中提到了这一点(我为强调添加了斜体):

      允许在命名空间中使用类型,这样您就不必限定在该命名空间中使用类型

      您仍然需要使IO 符合IO 操作的资格。例如,如果你想使用 Path 类,你需要:

      var filename = System.IO.Path.GetFilename(fullPath);
      

      【讨论】:

        【解决方案4】:

        为了扩展其他答案,确实没有“子命名空间”。没有什么能阻止您声明自己的 System.IO。您当然不想这样做,但您不需要父 System 命名空间来执行此操作。

        您可能有一个默认具有 MyCompany.MyProject 命名空间的项目,但您可以在同一项目的另一个 .cs 文件中轻松声明 XYZ.Some.Other.Random.Namespace。命名空间没有继承,XYZ.Some.Other 不存在。 C# 将允许您使用它,但是,当您尝试使用它的其余部分 (Random.Namespace) 实例化您的类时,它不知道如何找到该类,并且在您完全限定名称空间之前不会解析using 或完全限定您的变量声明。

        【讨论】:

          猜你喜欢
          • 2010-10-22
          • 2016-10-08
          • 2020-05-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-21
          相关资源
          最近更新 更多