MSDN

定义

在类,结构体或接口中定义的类型称为嵌套类型。

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

访问控制

嵌套类型默认为Private;仅可从其包含的类型进行访问。

另请注意,使嵌套类型在外部可见违反了代码质量规则 CA1034“嵌套类型不应是可见的”。

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

  • “类”的嵌套类型可以是 public、protected、internal、protected internal、private 或 private protected。

  • 在密封(Sealed)类中定义 protected、protected internal 或 private protected 嵌套类将产生编译器警告 CS0628“封闭类汇中声明了新的受保护成员”。

  • 构造体的嵌套类型可以是 public、internal 或 private。

嵌套类型可以访问包含类型的全部成员(包括私有成员和(所用继承的)受保护成员),若要访问包含类型,请将其作为参数传递给嵌套类型的构造函数。包含类型访问嵌套类型受访问修饰符限制。

namespace Reflection
{  
	public class Container
	{
    	public class Nested
    	{
        	private Container? parent;

        	public Nested()
        	{
        	}
        	public Nested(Container parent)
        	{
            	this.parent = parent;
        	}
    	}
	}
}

继承

只能继承public或internal修饰的嵌套类型,包含类型无法继承嵌套类型。

反射

反射嵌套类时,需要使用“+”而不是“.”。例如:

Assembly assembly = Assembly.Load("Reflection");
//命名空间与包含类型之间连接使用“.”;包含类型与嵌套类型之间的连接有“+”
Type type = assembly.GetType("Reflection.Container+Nested")

另一种方法:

  1. Type type = Type.GetType("Container")来获取包含类型部的type类型;
  2. Type nestedType = type.GetNestedType("Nested")即可获取嵌套类的类型