【问题标题】:Namespace vs nesting class [duplicate]命名空间与嵌套类[重复]
【发布时间】:2015-02-17 19:30:56
【问题描述】:

我正在考虑这两种情况:

class StructuralCase
{
   class Structure
   {
       ...
   }
   class Material
   {
       ...
   }
   class Forces
   {
       ...
   }
}

和

namespace StructuralCase
{
   class Structure
   {
       ...
   }
   class Material
   {
       ...
   }
   class Forces
   {
       ...
   }
}

问题是在“StructuralCase”中我不会声明任何实例变量,例如,它将作为其余类的“父级”。

这让我考虑将 StructuralClass 转换为命名空间。你怎么看?有什么硬性规定吗?

【问题讨论】:

  • 您是否试图限制嵌套类的可见性?为什么还要考虑嵌套?
  • 父类?你的意思是一个有内部类的类?我认为只有在 Java 中才有可能......
  • @nbro 嵌套类在 c# 中也有效
  • @VsevolodGoloviznin 是的,从帖子中,我也这么认为:D
  • @JosePerez 我个人从不使用嵌套类,对于纯粹的组织,只需使用命名空间。仅当您确实有充分理由时才嵌套。

标签: c# class namespaces


【解决方案1】:

我会只使用命名空间,因为你没有一个类的所有开销。

一个类有更多的结构、变量和方法,并提供了继承层,但如果你不需要它们,就不要使用Class。

【讨论】:

  • 欢迎来到stackoverflow!我看到你是第一个回答的,加上一个,但其他答案详细说明了一点。但这是一个很好的第一个答案。干杯!
【解决方案2】:

你拥有的是两种不同的东西。

第一个场景class example:

你有一个包含 3 个嵌套私有类的内部类

在您的第二种情况下namespace example:

你有 3 个没有嵌套的内部独立类。

如果类应该只在StructuralCase 中使用,请使用第一个示例,否则如果类是独立的并且没有关系,那么命名空间是前进的方向。

【讨论】:

  • 简单有效。我知道这一点,但没有考虑到这一点。我会选择“命名空间”,因为这些类彼此不相关。
【解决方案3】:

一般来说,如果只是因为它启用了using 语句,您想使用namespace - 否则您必须通过所有嵌套类引用该类(当然,父类本身除外)。因此,在情况 1 中,外部参考将必须说

StructuralCase.Structure s = ...

而不是

using StructuralCase; 
// ...
Structure s = ...

从功能上讲,创建嵌套类的唯一真正原因是

  • 这样嵌套类型可以访问父类型的非公共成员。如果这是 API 表面的问题,请参阅 internal
  • 这样子类就无法在父类之外访问,例如用于特定查询结果的特定struct
  • 这样子类可以共享父类的一些泛型参数,比如工厂类需要相同的泛型参数

【讨论】:

    猜你喜欢
    • 2015-07-21
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 2020-05-20
    • 2012-07-23
    相关资源
    最近更新 更多