嵌套类型 (C# 编程指南)

结构接口中定义的类型称为嵌套类型。 例如:

public class Container
{
    class Nested
    {
        Nested() { }
    }
}

无论外部类型是类、接口还是结构,嵌套类型都默认为 私有类型;只能从其包含类型访问它们。 在前面的示例中,外部类型无法访问 Nested 类。

还可以指定 访问修饰符 来定义嵌套类型的可访问性,如下所示:

  • 的嵌套类型可以是公共保护内部受保护的内部私有专用保护

    但是,在protected内部定义protected internalprivate 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();

另请参阅