using指令导入子名称空间

Mir*_*vec 3 c# language-features namespaces using

如果我导入这样的命名空间:

using System;
Run Code Online (Sandbox Code Playgroud)

为什么我不能像这样访问子名称空间IO:

IO.FileInfo fi;
Run Code Online (Sandbox Code Playgroud)

Insted我必须写一条完整的路径:

System.IO.FileInfo fi;
Run Code Online (Sandbox Code Playgroud)

或导入整个IO命名空间并使用不带命名空间的类

using System.IO;

FileInfo fi;
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

Ree*_*sey 5

虽然通过"命名空间"和"子命名空间"来思考通常很方便,但实际上只有类型名称.

在这种情况下,有一种类型: System.IO.FileInfo

using指令允许编译器添加System.到任何类型以查看它是否找到匹配的类型名称.但是,这将找不到IO.FileInfo,因为它将查找IO包含FileInfo嵌套类型的类型.

设计语言的方式可能看起来更麻烦,但它消除了嵌套类型名称与命名空间名称的混淆,因为它只查找using指令中定义的名称空间内的类型.这减少了类型命名冲突的可能性.