using System;
public class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields(){}
}
public class B:A
{
int x=1;
int y;
public B()
{
y=-1;
}
public override void PrintFields()
{
Console.WriteLine("x={0},y={1}", x, y);
}
}
问 new 一个类B的时候会有什么结果,请达人给出正确解释
的确是x=1,y=0
B继承了A,初始化B时是先调用A的构造函数的。即public A(){PrintFields();}由于A中的PrintFields()是虚拟的,实际上调用的是B中重写的public override void PrintFields(),这时候B并没有初始化即没有y=-1发生。c#对没赋值的变量默认为0.所以输出的自然是x=1,y=0。
之后才调用B的构造函数这时y=-1。
继承,构造顺序的问题,1,0正确
静态构造函数
using System;
class A
{
public static int X;
static A()
{
X = B.Y + 1;
Console.WriteLine("static A()");
}
}
class B
{
public static int Y = A.X + 1;
static B(),
{
Console.WriteLine("static B()");
}
static void Main() //① 程序入口,
{
Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y);//⑤ 输出结果
Console.ReadLine();
}
}
/**************************************************
* 静 态 构 造 函 数 练 习
*
* 输出结果: static A()
* static B()
* X = 1, Y = 2