日期:2014-05-18  浏览次数:20451 次

C#大侠请进
一道面试题我遇到了两次,明明没有答案,肯定会出错,但为什么没有会出错的选项让我选啊:
试题如下:
C# code

 class Class1
    {
        private static int count = 0;
        static Class1()
        {
            count++;
        }
        public Class1()
        {
            count++;
        }
    }
static void Main(string[] args)
        {
            Class1 o1 = new Class1();
            Class1 o2 = new Class1();
            Console.WriteLine(o1.count);
        }


根据以上代码判断,o1.Count的值是多少?
A.1
B.2
C.3
D.4


------解决方案--------------------
3.............
------解决方案--------------------
怎么才可以通过编译呢,总是报错
------解决方案--------------------
经过我精确计算
F
------解决方案--------------------
最后一句改成这样就能通过了,答案是3
Console.WriteLine(count);
------解决方案--------------------
应改为Console.WriteLine(Class1.count);
静态变量是不需要实例化对象的。

输出值是3,因为静态变量是共用的,每实例化一次都自增1,最后输出的时候又调用构造函数自增1,相当于增加了3次1。


------解决方案--------------------
这个编译还真不能通过的说,
count该变量第一为静态的,第二为私有的,没法折腾。你的面试题出问题了。
------解决方案--------------------
探讨

引用:
这个编译还真不能通过的说,
count该变量第一为静态的,第二为私有的,没法折腾。你的面试题出问题了。

是的,我当时也是这样想的,真是纠结

------解决方案--------------------
那人用错的题来考你的,//结果是3


正确写法是:
C# code
class Class1
{
    public static int count = 0;
    static Class1()  //1
    {
        count++;
    }
    public Class1() //3 //5
    {
        count++;
    }
}

------解决方案--------------------
参考
最下面的代码和楼主的题目90%类似