public class Container
{
class Nested
{
Nested() { }
}
}
无论外部类型是类、接口还是结构,嵌套类型都默认为 私有类型;只能从其包含类型访问它们。 在前面的示例中,外部类型无法访问 Nested
类。
还可以指定 访问修饰符 来定义嵌套类型的可访问性,如下所示:
类的嵌套类型可以是公共、保护、内部、受保护的内部、私有或专用保护。
但是,在
protected
内部定义protected internal
、private protected
或以内嵌类时,会生成编译器警告CS0628:“在密封类中声明的新受保护成员”。另请注意,使嵌套类型在外部可见违反了代码质量规则 CA1034 “嵌套类型不应可见”。
以下示例将 Nested
类公开:
public class Container
{
public class Nested
{
Nested() { }
}
}
嵌套类型(或内部类型)可访问包含类型(或外部类型)。 若要访问包含类型,请将其作为参数传递给嵌套类型的构造函数。 例如:
public class Container
{
public class Nested
{
private Container? parent;
public Nested()
{
}
public Nested(Container parent)
{
this.parent = parent;
}
}
}
嵌套类型可以访问其封闭类型中所有可访问的成员。 它可以访问包含类型的私有成员和受保护成员(包括所有继承的受保护成员)。
在前面的声明中,类 Nested
的全名 Container.Nested
。 这是用于创建嵌套类的新实例的名称,如下所示:
Container.Nested nest = new Container.Nested();