谁能给我解释一道笔试题

dopsop110 2009-07-09 05:15:28


class A
{
public static int X;
static A()
{
X = B.Y + 1;
}
}
class B
{
public static int Y = A.X + 1;
static B() { }
static void Main()
{
Console.WriteLine("X={0},Y={1}", A.X, B.Y);
Console.Read();
}
}

结果是 x=1,y=2 为什么?
...全文
109 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wackyboy 2009-07-14
  • 打赏
  • 举报
回复
静态的构造函数会在类加载的时候执行
ClassA: B.Y=0 所以 X=1
ClassB: A.X=1 所以 Y=2
guoyichao 2009-07-14
  • 打赏
  • 举报
回复
类被第一次使用时才会执行类静态成员初始化,而类静态成员初始化时,先执行静态初始化字段,再执行静态构造函数。

Main函数因为是入口函数被宿主进程调用,由于Main是B的静态成员则按规则在调用前先初始化静态字段,也就是先执行Y = A.X + 1, 在计算表达式过程中需要用到A.X,执行点被转移到对A的静态成员初始化,A没有需要静态初始化的字段,就直接执行静态构造函数的X = B.Y + 1,B.Y还未完成初始化根据语言特性默认为0,此时X被初始化为1,然后Y就马上被初始化为2。
Lyulf 2009-07-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 at_gaj 的回复:]
一个类中调用另一类的静态变量时,是不会去调用构造方法的。静态变量属于应用程序,而不属于某个对象。
[/Quote]
int型的变量默认初始值是0,结合上面这句话你就该明白了
zys_zhang 2009-07-14
  • 打赏
  • 举报
回复
我不同同意楼上老兄说的话..在调用静态变量时,,还去调用静态构造函数..这样就对了..你可以试一试..

静态构造函数和一个不是静态构造函数它们谁先执行...我认为应该是静态构造函数先执行
abeniaj0427 2009-07-14
  • 打赏
  • 举报
回复
一个类中调用另一类的静态变量时,是不会去调用构造方法的。静态变量属于应用程序,而不属于某个对象。
dopsop110 2009-07-14
  • 打赏
  • 举报
回复
没会的?
starts_2000 2009-07-09
  • 打赏
  • 举报
回复
分别看看下面几种的结果:

class A
{
public static int X;
static A()
{
X = B.Y + 1;
}
}
class B
{
public static int Y = A.X + 1;
static B() { }
static void Main()
{
Console.WriteLine("X={0},Y={1}", A.X, B.Y);
Console.Read();
}
}



class A
{
public static int X;
static A()
{
X = B.Y + 1;
}
static void Main()
{
Console.WriteLine("X={0},Y={1}", A.X, B.Y);
Console.Read();
}
}
class B
{
public static int Y = A.X + 1;
static B() { }
}


class A
{
public static int X;
static A()
{
X = B.Y + 1;
}
}
class B
{
public static int Y = A.X + 1;
static B() { }
}
static class Program
{
static void Main()
{
Console.WriteLine("X={0},Y={1}", A.X, B.Y);
Console.Read();
}
}


class A
{
public static int X;
static A()
{
X = B.Y + 1;
}
}
class B
{
public static int Y = A.X + 1;
static B() { }
}
static class Program
{
static void Main()
{
Console.WriteLine("Y={0},X={1}", B.Y, A.X);
Console.Read();
}
}
lwj7891875 2009-07-09
  • 打赏
  • 举报
回复
我也很想知道 我单步调试 居然更加迷糊了
龙宜坡 2009-07-09
  • 打赏
  • 举报
回复
貌似很多人问过这问题

自己单步调试就很明显!

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧