C#,是否可以将嵌套类用于逻辑结构?

Cie*_*iel 8 c# design-patterns

关于嵌套类的使用,我有一些争论.情况是类名在两个或多个地方重复是有意义的,虽然每个不同实例之间存在中度相似性,但它们通常是不同的.嵌套类通常不需要(如果有的话)超出其父类的范围.

那么,这似乎对我来说更有意义,而不仅仅是提出三个不同的类名.

class A {
   class B {
}

class M {
   class B {
   }
}

class Q {
   class B {
   }
}
Run Code Online (Sandbox Code Playgroud)

显而易见的问题不是功能,而是一致性/重复性.我想知道其他开发人员是否曾经遇到过同样的问题,以及一些意见是什么.

Hei*_*nzi 11

.NET设计指南反对这一提议:

  • "不要将公共嵌套类型用作逻辑分组构造;请为此使用名称空间."
  • "避免公开暴露的嵌套类型.唯一的例外是嵌套类型的变量需要在少数情况下声明,例如子类化或其他高级自定义方案."

这也是基类库做什么:在System.Web.UI命名空间中,你有DataGridItem,DataListItem,ListViewItem,MenuItem,RepeaterItem,等.所有这些可以称为Item和嵌套DataGrid,DataList等等.但是,这会违反了上述两个原则.

  • +1.我们可以花几个小时在这里讨论意见,但如果.NET设计指南建议一个实践,框架本身遵循这种做法,我们就有了理想的答案. (2认同)