嵌套类型(nested type)是声明在另一个类型内部的类型:
嵌套类型有如下的特征:
· 可以访问包含它的外层类型中的私有成员,以及外层类型能够访问的所有内容。
· 可以在声明上使用所有的访问权限修饰符,而不限于 public 和 internal 。
· 嵌套类型的默认可访问性是 private 而不是 internal 。
· 从外层类以外访问嵌套类型,需要使用外层类名称进行限定(就像访问静态成员一样)。
例如,为了从 TopLevel 外访问 Color.Red ,我们必须这样做:
所有的类型(类、结构体、接口、委托和枚举)都可以嵌套在类和结构体之内。
以下示例在嵌套类型中访问外层私有成员:
以下示例在嵌套类型上使用 protected 访问权限修饰符:
以下示例在外层类型之外的类型中引用嵌套类型:
嵌套类型在编译器中得到了广泛应用,例如,编译器在生成迭代器和匿名方法时就会生成包含这些结构内部状态的私有(嵌套)类。
如果使用嵌套类型主要是为了避免命名空间中类型定义杂乱无章,那么可以考虑使用嵌套命名空间。使用嵌套类型的原因应当是利用它较强的访问控制能力,或者是因为嵌套的类型必须访问外层类型的私有成员。