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

本文关键字:命名空间 访问 | 更新日期: 2023-09-27 18:26:55

我有一个位于命名空间Proj.Devices中的Device类。此类是否可以访问命名空间Proj.Devices.Messages中的Message类。两个类都在同一个项目中。我不是在问这是否可能,但这是否是一种糟糕的做法?

我认为,如果我将这个项目拆分为单独的项目,循环引用会有问题,但除此之外,这可以吗?

编辑:我在命名空间命名指南上发现了这一点

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

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

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

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

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

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

应该避免,因为:

  • 依赖疯狂:
    • 相互依赖
    • 没有子命名空间,基本命名空间就不可能存在
    • 没有这个子命名空间,引用基本命名空间的所有内容都不可能存在等等
  • 调试步骤将不太容易理解
  • 堆叠竞争将不那么容易理解

如果你不关心体系结构,那就不是问题。但是,如果你问自己这个问题,你已经在考虑编写好的代码了——这意味着新的用法即将到来,而不仅仅是针对你自己;)-。

这就是为什么存在这样的做法来避免高耦合:

  • 接口
  • 扩展方法
  • 虚拟/覆盖

建筑关乎时间,而不仅仅是美。在某种程度上,无体系结构的代码可维护性、可理解性和可扩展性较差。

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

若两个命名空间中的类相互引用,那个么将它们放在单独的项目中是不好的,只要它们在同一个项目中就可以了。