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

Lia*_*roy 0 c# inheritance assemblies namespaces class-hierarchy

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

为什么当子级不包含父级名称空间?

Jon*_*eet 5

System.Collections.Generic的任何成员都应该已经引用了System.Collections,因为它是子级的吗?

不。名称空间之间没有继承。一个using指令从命名空间进口类型-它从命名空间不导入类型开始与给定的命名空间包含给定命名空间的名称中,或命名空间。

例如,之后:

using System.Collections;
Run Code Online (Sandbox Code Playgroud)

...既不允许您将其List<T>用作简单名称System.Collections.Generic.List<T>,也不允许您将其Guid用作简单名称System.Guid

唯一的例外是,如果你的命名空间声明中正在编写代码X.Y.Z,隐含进口的命名空间X.YX(以及X.Y.Z,当然)。(在这个例子中,X.Y封闭的命名空间,如果X.Y.Z,但它不是继承关系)。

  • @OutlawLemur:显示* type *的继承-例如,`System.Collections.Generic.List &lt;T&gt;`继承自`System.Object`。我没有看到任何暗示一个*名称空间*从另一个继承的东西。(例如,类型Foo.Bar.Baz可以继承类型ABC。这并不意味着名称空间Foo.Bar和AB之间存在关联。) (3认同)