namespace _1413_接口
{
public class Program
{
static void Main(string[] args)
{
MyClass m = new MyClass();
m.fun();
m.c.func();
}
}
class MyClass
{
public class B
{
public int x;
public static int y;
}
public void fun()
{
b.x = 1;
Console.WriteLine(b.x);
}
private B b = new B();
private int yy;
public class C
{
public void func()
{
B.y = 1;//无法调用b,所以也就无法调用到b.x
Console.WriteLine(B.y);
}
public class CC
{
public void funcc()
{
B.y = 1;//也可以访问B.y
MyClass.z = 1;
Console.WriteLine(B.y);
}
}
}
private static int z;
public C c = new C();
}
}
在func和funcc中,都无法使用b这个对象,但是在fun中可以使用。但在func和funcc中都可以使用B.y。
总结:
1.成员函数可以访问类内同一作用域内的所有对象以及它们的公有数据成员,这一点和C++类似。
2.类C是嵌套在A中定义的,对于C中的成员函数而言,A中的非静态数据成员b是不可见的,但A中的类定义B是可见的,所以B类的公有静态数据成员也是可见的。这大概是因为B和C是在同一个作用域中,而静态数据成员和函数也都是属于这两个类的,同理如果C还有一个类成员D,那么对D而言,他和C,B,甚至A都是在同一个作用域中,因此它也可以访问B,甚至是A的静态数据成员,这大概就是是嵌套类和单个类的唯一不同吧。