2011/5/5 最近碰到的几道面试题

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

原文地址:https://www.cnblogs.com/wangshuai/p/2038366.html