如果我导入这样的命名空间:
using System;
为什么我不能像这样访问子名称空间IO:
IO.FileInfo fi;
Insted我必须写一条完整的路径:
System.IO.FileInfo fi;
或导入整个IO命名空间并使用不带命名空间的类
using System.IO;
FileInfo fi;
我在这里错过了什么吗?
答案 0 :(得分:5)
虽然考虑“命名空间”和“子命名空间”通常很方便,但实际上只有类型名称。
在这种情况下,只有一种类型:System.IO.FileInfo
using指令允许编译器将System.
添加到任何类型以查看它是否找到匹配的类型名称。但是,这不会找到IO.FileInfo
,因为它会查找包含IO
嵌套类型的FileInfo
类型。
设计语言的方式可能看起来更麻烦,但它消除了嵌套类型名称与命名空间名称的混淆,因为它只查找using指令中定义的名称空间内的类型。这减少了类型命名冲突的可能性。
答案 1 :(得分:2)
C#并不具备子名称空间的概念。命名空间名称中的句点仅用于逻辑组织目的。
就C#而言, System
和System.IO
是两个不同的命名空间。
如果你只需要FileInfo
课程,你可以这样做:
using FileInfo = System.IO.FileInfo;
答案 2 :(得分:0)
您尝试执行的操作仅在上下文类型位于同一命名空间层次结构中时才起作用,例如:
namespace System {
class MyClass {
IO.FileInfo fi;
}
}
您还可以拥有相对导入,如下所示:
namespace System {
using IO;
}