通常在将命名空间或程序集包含到我的代码中时,我经常遇到奇怪的情况,即命名空间是从另一个命名空间继承的,但父命名空间中的类不可用。例如,当使用 List<>
时或 Dictionary<>
,我用的是System.Collections.Generic
命名空间。但是,如果我还想使用 IEnumerator
,我还必须包括 System.Collections
命名空间。不应该System.Collections
已被 System.Collections.Generic
的任何成员引用,因为它是一个 child ?两个命名空间还共享相同的程序集 mscorlib.dll。
为什么在子命名空间中不包含父命名空间?
最佳答案
Shouldn't System.Collections already be referenced by any member of System.Collections.Generic, as it is a child?
不。命名空间之间没有继承。 A
using
指令仅从该 namespace 导入类型 - 它不会从以给定 namespace 开头的 namespace 或包含在给定 namespace 名称中的 namespace 导入类型。例如,之后:
using System.Collections;
... 这不允许您使用
List<T>
作为 System.Collections.Generic.List<T>
的简单名称,也不允许您使用 Guid
作为 System.Guid
的简单名称.唯一的异常(exception)是,如果您在
X.Y.Z
的命名空间声明中编写代码。 , 隐式导入命名空间 X.Y
和 X
(当然还有 X.Y.Z
)。 (在那个例子中, X.Y
是封闭的命名空间 if X.Y.Z
,但它不是继承关系。)
关于c# - 包含时的命名空间、程序集和继承层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23613887/