C#,逻辑结构可以使用嵌套类吗?

标签 c# design-patterns

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

那么,与其只是想出三个不同的类名,这对我来说似乎更有意义。

class A {
   class B {
}

class M {
   class B {
   }
}

class Q {
   class B {
   }
}

明显的问题不是功能性,而是一致性/重复性。我想知道其他开发人员是否曾经为同样的事情而苦苦挣扎,以及他们的一些意见是什么。

最佳答案

.net Design Guide advises against it :

  • “不要使用公共(public)嵌套类型作为逻辑分组结构;为此使用命名空间。”
  • “避免公开暴露嵌套类型。唯一的异常(exception)是在极少数情况下需要声明嵌套类型的变量,例如子类化或其他高级自定义情况。”

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

关于C#,逻辑结构可以使用嵌套类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7402849/

相关文章:

c# - 从 'System.Int32' 到 'System.Nullable` 1[[System.Int32, mscorlib]] 的转换无效

c# - 定义无效异常 : The definition of the report '' is invalid

c# - 如何修改所有派生类中的方法返回值?

c++ - 递归模板成语如何避免基类是子类的 friend

java - 为具有不同参数的方法设计接口(interface)

c# - 加密字符串时重用 AES 对象是否安全?

c# - 如何在 C# 中用下划线替换字符串中的空格?

c# - WCF,xml 创建我想要删除的 ExtensionData 标记

model-view-controller - 设计一个可扩展的数据库模型

c++ - Apache thrift "TProtocol class"设计原则-C++,为什么需要 "writeBool()"