所以我的程序在开头有这两行
using System;
using System.IO;
问题:第二个语句是否真的需要在我的代码中包含Sytem.IO方法和属性? 似乎'System.IO'是命名空间'System'的'子'。第一行不应该抓住所有子命名空间吗?或者我不正确理解命名空间吗?
答案 0 :(得分:5)
System.IO
命名空间用于Input Output
操作。(例如:File
操作)
System
命名空间不包含所有子命名空间
因此,如果您要执行IO
操作,则应包含System.IO
命名空间explicitly
。
第一个问题:第二个陈述是否真的有必要 在我的代码中包含Sytem.IO方法和属性?
是这是必要的,因为System
命名空间不包含Child
命名空间。
第二个问题:似乎'System.IO'是该'的'孩子' 命名空间'系统'。
是 System.IO
是System
命名空间的子项。
注意:虽然System.IO
是System
的子级空间,但当您包含System
namspace
第三个问题:第一行不应该抓住所有孩子 命名空间呢?或者我不正确理解命名空间吗?
否第一行using System;
未获取所有子名称空间,因为使用外卡不是java
到import
所有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
或完全限定您的变量声明。