名称空间:使用System&使用System.IO

时间:2013-12-18 18:30:59

标签: c# namespaces

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

using System;
using System.IO;

问题:第二个语句是否真的需要在我的代码中包含Sytem.IO方法和属性?  似乎'System.IO'是命名空间'System'的'子'。第一行不应该抓住所有子命名空间吗?或者我不正确理解命名空间吗?

4 个答案:

答案 0 :(得分:5)

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

System命名空间不包含所有子命名空间 因此,如果您要执行IO操作,则应包含System.IO命名空间explicitly

  

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

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

  

第二个问题:似乎'System.IO'是该'的'孩子'   命名空间'系统'。

System.IOSystem命名空间的子项。

注意:虽然System.IOSystem的子级空间,但当您包含System namspace

时,它不会被包含在内
  

第三个问题:第一行不应该抓住所有孩子   命名空间呢?或者我不正确理解命名空间吗?

第一行using System;未获取所有子名称空间,因为使用外卡不是javaimport所有child namspeaces角色明星*

答案 1 :(得分:2)

C#与java不同,您可以使用通配符导入名称空间。

using System;
C#中的

不同
import system.*;

在Java中。

这就是它的全部内容。您需要明确地包含名称空间 - 对它说不多:)

答案 2 :(得分:0)

  

第一行不应该抓住所有子命名空间吗?或者我不正确理解命名空间吗?

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

  

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

您仍然需要为IO操作限定IO。例如,如果您想使用Path类,则需要:

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

答案 3 :(得分:0)

要扩展其他答案,确实没有“子命名空间”。没有什么可以阻止你宣布自己的System.IO。当然,您不希望这样做,但您不需要父System命名空间来执行此操作。

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