注释
此内容由 Pearson Education, Inc. 的许可从 框架设计指南:可重用 .NET 库的约定、习惯和模式(第 2 版)重新打印。 该版于2008年出版,此后该书已于 第三版全面修订。 此页上的一些信息可能已过期。
嵌套类型是在另一种类型的范围内定义的类型,称为封闭类型。 嵌套类型有权访问其封闭类型的所有成员。 例如,它有权访问在封闭类型中定义的专用字段以及封闭类型的所有升序中定义的受保护字段。
通常,应谨慎使用嵌套类型。 其原因有若干: 一些开发人员并不完全熟悉这一概念。 例如,这些开发人员可能对声明嵌套类型的变量的语法有问题。 嵌套类型也与封闭类型紧密耦合,因此不适合常规用途类型。
嵌套类型最适合对其封闭类型的实现详细信息进行建模。 最终用户很少必须声明嵌套类型的变量,而且几乎永远不必显式实例化嵌套类型。 例如,集合的枚举器可以是该集合的嵌套类型。 枚举器通常由其封闭类型实例化,并且由于多种语言支持 foreach 语句,枚举器变量很少必须由最终用户声明。
✔️ 当嵌套类型和其外部类型之间的 关系使得成员可访问性语义可取时,请务必使用嵌套类型。
❌ 请勿将公共嵌套类型用作逻辑分组构造;为此使用命名空间。
❌ 避免公开的嵌套类型。 唯一的例外是,只有在极少数情况下(例如子类或其他高级自定义方案)才需要声明嵌套类型的变量。
❌ 如果某个类型可能会在其包含的类型之外被引用,请勿使用嵌套类型。
例如,传递给在类上定义的方法的枚举不应定义为类中的嵌套类型。
❌ 请勿使用需要通过客户端代码实例化的嵌套类型。 如果某个类型具有公共构造函数,则它可能不应被嵌套。
如果一个类型可以实例化,这似乎表明该类型本身在框架中具有一个位置(你可以创建它,使用它,并销毁它,而无需使用外部类型),因此不应嵌套。 内部类型不应在外部类型之外广泛重复使用,而没有任何与外部类型的关系。
❌ 请勿将嵌套类型定义为接口的成员。 多种语言不支持此类构造。
部分内容 © 2005, 2009 Microsoft 公司。 保留所有权利。
获得皮尔逊教育公司许可后重印自 框架设计准则:可重用 .NET 库的约定、习惯和模式 ,由 Krzysztof Cwalina 和 Brad Abrams 编写,并作为微软 Windows 开发系列中的出版物之一,于 2008 年 10 月 22 日由 Addison-Wesley Professional 出版。