包含时的命名空间,程序集和继承层次结构

时间:2014-05-12 16:11:16

标签: c# inheritance namespaces assemblies class-hierarchy

通常在将命名空间或程序集包含到我的代码中时,我经常遇到奇怪的情况,其中命名空间是从另一个继承的,但是来自父命名空间的类不可用。例如,在使用List<>Dictionary<>时,我使用System.Collections.Generic命名空间。但是,如果我还想使用IEnumerator,我还必须包含System.Collections命名空间。 System.Collections的任何成员都不应该引用System.Collections.Generic,因为它是小孩吗?两个名称空间也共享相同的程序集mscorlib.dll。

为什么在子节点不包括父命名空间?

1 个答案:

答案 0 :(得分:4)

  

System.Collections.Generic的任何成员都没有引用System.Collections,因为它是一个孩子?

没有。命名空间之间没有继承。 using指令从该命名空间导入类型 - 它不会从具有给定命名空间的命名空间开始导入类型,或者包含在给定命名空间中的命名空间名称空间的名称。

例如,在:

之后
using System.Collections;

...这不允许您使用List<T>作为System.Collections.Generic.List<T>的简单名称,也不允许您使用Guid作为{{1的简单名称}}

例外情况是,如果您在System.Guid的名称空间声明中编写代码,则会隐式导入名称空间X.Y.Z和{{1} (当然还有X.Y)。 (在该示例中,X封闭命名空间,如果X.Y.Z,但它不是继承关系。)