命名空间与嵌套类

Jos*_*cia 8 c# namespaces class

我正在考虑这两种情况:

class StructuralCase
{
   class Structure
   {
       ...
   }
   class Material
   {
       ...
   }
   class Forces
   {
       ...
   }
}
Run Code Online (Sandbox Code Playgroud)

namespace StructuralCase
{
   class Structure
   {
       ...
   }
   class Material
   {
       ...
   }
   class Forces
   {
       ...
   }
}
Run Code Online (Sandbox Code Playgroud)

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

这导致我考虑将StructuralClass转换为命名空间.你觉得怎么样?有什么硬规则吗?

小智 5

我只会使用命名空间,因为您不需要所有类的开销。

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

  • 欢迎使用 stackoverflow!我看到你是第一个回答的,再加上一个,但其他答案详细说明了一点。但这是一个很好的第一个答案。干杯! (3认同)

Dar*_*ren 5

你有两件事.

第一种情况class example:

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

在您的第二个场景中namespace example:

您有3个内部独立类,没有嵌套.

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

  • 简单有效。我知道这一点,但没有考虑到这一点。我将选择“命名空间”,因为这些类彼此不相关。 (2认同)

Dav*_*vid 5

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

StructuralCase.Structure s = ...
Run Code Online (Sandbox Code Playgroud)

代替

using StructuralCase; 
// ...
Structure s = ...
Run Code Online (Sandbox Code Playgroud)

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

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