可以在父命名空间中的类访问子命名空间中的类

时间:2013-08-09 11:17:55

标签: c# namespaces

我有一个名为Device的{​​{1}}类。此类是否可以访问名称空间Proj.Devices中的Message类。这两个类都在同一个项目中。我不是在问这是否可能,但这是否是一种不好的做法?

如果我将这个项目分成不同的项目,我认为循环引用会有问题但是这样可以吗?

编辑: 我在Namespace Naming Guidelines

上找到了这个

“嵌套命名空间应该依赖于包含命名空间中的类型。例如,System.Web.UI.Design中的类取决于System.Web.UI中的类。但是,System中的类。 Web.UI不依赖于System.Web.UI.Design中的类。“

2 个答案:

答案 0 :(得分:8)

我不同意Morbia的看法。命名空间不仅仅用于分组,它们是逻辑分离(组件),其中程序集是具体的分隔(层和关注点)。

他们也经常被视为等级制。从哲学上讲,层次结构中较低层的东西通过其父级存在,而父级可以在没有这个特定子元素的情况下存在。

我认为这就是现在Core命名空间存在的原因。基本命名空间只是基础结构/基础。

如果其基本命名空间使用了子命名空间,则可以确保在大多数情况下存在相互依赖关系:这会显示架构风险。

应该避免因为:

  • 依赖性疯狂:
    • 相互依赖
    • 如果没有子命名空间,您的基本命名空间就不存在
    • 如果没有此子命名空间,则无法存在引用基本命名空间的所有内容 等等...
  • 调试步骤不太容易理解
  • 堆栈跟踪将不太容易理解

如果你不关心架构,那不是问题。但是,如果你问自己这个问题,那么你已经在考虑编写好的代码了 - 这意味着新的用法传入而不只是为了你自己;) - 。

这就是存在避免高耦合的原因:

  • 接口
  • 扩展方法
  • 虚拟/超驰

建筑是关于时间而不仅仅是美。在某种成熟度下,无架构代码就是 不易维护,不易理解,可扩展性低。

答案 1 :(得分:1)

是的,命名空间只是类的分组。 不,这不是不好的做法,这是正常的情况。

如果来自两个命名空间的类相互引用它们并不是一个好主意,只要它们在同一个项目中就可以了。