c# - 包含时的命名空间、程序集和继承层次结构

标签 c# inheritance namespaces assemblies class-hierarchy

通常在将命名空间或程序集包含到我的代码中时,我经常遇到奇怪的情况,即命名空间是从另一个命名空间继承的,但父命名空间中的类不可用。例如,当使用 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.YX (当然还有 X.Y.Z )。 (在那个例子中, X.Y 是封闭的命名空间 if X.Y.Z ,但它不是继承关系。)

关于c# - 包含时的命名空间、程序集和继承层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23613887/

相关文章:

c# - EmbeddedConfiguration 中的 UniqueConstraint

c# - 如何在代码中更改 GridView 中的图像 DataImageUrlFormatString 值?

c++ - 是否建议在函数中使用 using 关键字?

C++ 上下文错误

c# - 将窗口保持在前台(即使它失去焦点)

C# Richtextbox - 通过滚动并按住 ctrl 更改文本大小后获取文本大小

grails - Grails/GORM 中的继承和约束问题

javascript - 在类 deceleration 之外声明的方法无法被 javascript 中的子类继承

java - 该程序无法使用子类而不是父类(super class)来运行

python - 什么是模块变量与全局变量?