1.
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);
}
}
class Program
{
static void Main(string[] args)
{
B b = new B();
Console.ReadKey();
}
}
答案为:x=1,y=0
2.
public class A
{
public static int Count;
static A()
{
Count++;
}
public A()
{
Count++;
}
}
class Program
{
static void Main(string[] args)
{
A a1 = new A();
A a2 = new A();
Console.WriteLine(A.Count);
Console.ReadKey();
}
}
答案:3
3.
public class A
{
public static int X;
static A()
{
X = B.Y + 1;
}
}
public 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.ReadKey();
}
}
答案:x=1,y=2
注:因为Main函数在B中,所以程序的初始化会从B开始,当在public static int Y = A.X + 1;时,会执行A的构造函数,所以X=1,Y=2
如何把Main函数放到A类中,程序运行时会从A开始,因此X=2,Y=1