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)
我在这里错过了什么吗?
虽然通过"命名空间"和"子命名空间"来思考通常很方便,但实际上只有类型名称.
在这种情况下,有一种类型: System.IO.FileInfo
using指令允许编译器添加System.
到任何类型以查看它是否找到匹配的类型名称.但是,这将找不到IO.FileInfo
,因为它将查找IO
包含FileInfo
嵌套类型的类型.
设计语言的方式可能看起来更麻烦,但它消除了嵌套类型名称与命名空间名称的混淆,因为它只查找using指令中定义的名称空间内的类型.这减少了类型命名冲突的可能性.