命名空间与嵌套类

时间:2014-12-18 21:47:50

标签: c# class namespaces

我正在考虑这两种情况:

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

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

问题在于" StructuralCase"我不会声明任何实例变量,例如,它将作为"父母"其他课程。

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

3 个答案:

答案 0 :(得分:5)

你所拥有的是两件不同的东西。

第一种情况 class example

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

在您的第二个方案中 namespace example

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

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:4)

通常,您希望使用namespace,只因为它启用using语句 - 否则您必须通过所有嵌套类引用该类(当然,除了父类本身之外) )。因此,在案例1中,外部参考将 来说

StructuralCase.Structure s = ...

而不是

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

在功能上,制作嵌套类的唯一真正原因是

  • 这样嵌套类型可以访问父类型的非公共成员(并且由于某种原因你讨厌internal
  • 这样子类不能在父类之外访问(例如用于特定查询结果的特定struct
  • 这样子类可以从父类共享一些通用参数(例如泛型类型的工厂类)。