static void Main()
{ Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y); }
class A
{ public static int X = B.Y; static A()
{
++X;
}
} class B
{
public static int Y = A.X;
static B()
{
++Y;
} }Console.WriteLine("X = {0}, Y = {1}", A.X
调试时 顺序
1 public static int X = B.Y;
2 public static int Y = A.X;
3 static B()
4 {
++Y;
}5 static A()
{
++X;
}
第二次时 执行的是什么? 是 Y = A.X; 还是 静态成员初始化语句 如果是 Y = A.X 为什么不是执行 A的静态构造函数? 如果不是 为什么不执行 Y = A.X;
刚发错帖浪费了20分。希望大哥大姐们解决下
为这问题花了60分了 55555
{ Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y); }
class A
{ public static int X = B.Y; static A()
{
++X;
}
} class B
{
public static int Y = A.X;
static B()
{
++Y;
} }Console.WriteLine("X = {0}, Y = {1}", A.X
调试时 顺序
1 public static int X = B.Y;
2 public static int Y = A.X;
3 static B()
4 {
++Y;
}5 static A()
{
++X;
}
第二次时 执行的是什么? 是 Y = A.X; 还是 静态成员初始化语句 如果是 Y = A.X 为什么不是执行 A的静态构造函数? 如果不是 为什么不执行 Y = A.X;
刚发错帖浪费了20分。希望大哥大姐们解决下
为这问题花了60分了 55555
帮我讲下过程就行了。
谢谢另外有没高手留个msn
方便问问问题
以后每天发帖分给你 - -。
非常感谢
首先访问的是类A,所以先对A的静态成员初始化然后调用A的静态成员.初始化A的静态成员X的时候,对其分配空间并给予X的类型的默认值0(int类型的默认值是0).然后执行X的初始化语句: X = B.Y;这时要访问类B来完成初始化.
在执行 public static int Y = A.X; 时一样对Y分配空间并赋予值0.这里用到了类A的静态字段X,此时X=0(注意这时第2次调用X了),Y也为0,接着执行类B的静态构造函数,Y=1.此时X的初始化完成,执行A的静态构造函数.
是因为 第一代码的执行顺序,代码在前的先执行;这个吗?
----------------------------------------------
此时A.X的初始化过程已经启动,只不过未完成而已,这里不会再去执行A的静态构造函数,直接取A.X的当前值。
完成类B.Y的初始化,执行了B的静态构造函数后再返回,接下来才会执行A的静态构造函数。