嵌套类型可以自由访问外层类型的成员,而不在乎那些成员是否私有。外层类型如果想访问嵌套类型,则要受到访问规则的限制。
不管外层是类还是结构,嵌套类型均默认为 private,但是可以设置为 public、protected internal、protected、internal 或 private。
不管外层类型是类型还是结构,嵌套类型均默认为 private,但是可以设置为 public、protected internal、protected、internal 或 private。
如果嵌套类型是private或protected的,嵌套类型对外层类型以外的其它类型是不可访问的,外层类型和在外层类型中的另一个嵌套类型却可以访问它,但是无法使用它的private或protected成员。如果嵌套类型中的成员设置为 public或者internal,那么外层类型和其它同一个外层类型声明的嵌套类型可以访问嵌套类型的这些成员,但这些成员对外层类型以外的类型依旧隐藏。
如果嵌套类型是public或者internal的,那么它将和一个普通的类型类
似,其他类型可以使用MorthType.SonType的形式来正常的使用它,但这个嵌套类型依旧可以自由访问外层类型的所有成员。其实这在赋予一个类型强大的访问性的同时,却使一个类型的私有成员暴露出去,破坏了类型的封装性。此时外层类型功能上类型似一个命名空间,这也赋予类型一些命名空间的功能。
原例如下:
[开始引用]
嵌套类的静态构造函数不会随着外部类的触发而初始化。因此可以有效地避免创建时候初始化时间,当需要使用内嵌类的时候,嵌套类才开始初始化才开始初始化。
public class Outside
{
static Outside()
{
Console.WriteLine("Outside Inilizlized");
}
public void SayIt()
{
Nested.Run();
}
private class Nested
{
static Nested()
{
Console.WriteLine("Nested initilized");
}
public static void Run()
{
Console.WriteLine("Nested Run");
}
}
}
执行结果
Outside o = new Outside();//打印"Outside Inilizlized"
Console.ReadLine();
o.SayIt();//首先打印"Nested initilized" 再打印 "Nested Run"
Console.ReadLine();