代码改变世界

C#静态构造函数--一道.net面试题

2013-01-06 13:10  gcz  阅读(275)  评论(0)    收藏  举报

静态构造函数是C#的一个新特性,在编程过程中用处并不广,它的主要目的是用于初始化一些静态的变量。   因为这个构造函数是属于类的,而不属于任何一个实例,所以这个构造函数只会被执行一次,而且是在创建此类的第一个实例或引用任何静态成员之前,由.NET自动调用。

       在使用静态构造函数的时候应该注意以下几点:   

1、静态构造函数既没有访问修饰符,也没有参数。  --因为是.NET调用的,所以像public和private等修饰符就没有意义了。   

2、在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类。  --也就是说我们无法直接调用静态构造函数,也不可能知道静态构造函数何时会被调用。   

3、一个类只能有一个静态构造函数。  

4、无参数的构造函数可以与静态构造函数共存。  --尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。   

5、最多只运行一次。  

6、静态构造函数不可以被继承。  

7、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。

 

       面试的时候会经常遇到这样一道题,一个类中有一个静态int变量count=0,一个静态构造函数,一个构造函数,构造函数内是count++,然后实例化两个class1,问count的值。

下面这段代码是我对这道题做了一点改动,能更好的理解静态构造函数。

class Program
    {

        static void Main(string[] args)
        {
            Class1 g1 = new Class1();
            Class1 g2 = new Class1();
            Console.ReadLine();
        }
    }

     class Class1
    {
        public  static int count = 0;
        static Class1()
        {
            count++;
            Console.WriteLine("静态 count="+count);
        }
        public Class1()
        {
            count++;
            Console.WriteLine("构造 count="+count);
        }
    }

输出结果是:静态 count=1

                     构造 count=2

                     构造 count=3

根据上面的7个注意和这段代码就能很好的理解静态构造函数,实例化第一个对象的时候会执行静态构造函数和构造函数,实例化第二个对象的时候就不会执行静态构造函数了,只执行构造函数,所以count=3.