[C#]C#补习——静态构造函数、静态成员和常量相关

       上一篇补习了类和方法,这一篇补习下类中一些静态成员和常量。

以下是本文所要介绍的内容:

1、静态构造函数

2、静态成员与常量

 

一、静态构造函数

     前段时间经常看到园子里有朋友发面试题,其中比较有代表性的就是静态构造函数了,有兴趣的朋友可以搜索下看看,我这边也就顺便补习下静态构造函数的知识:

1、静态构造函数永远优先与其他构造函数。

2、静态构造函数是在首次访问所在类的第一个成员时进行的,并且只会执行一次。

3、静态构造函数没有参数,不需要任何访问修饰符,有.NET runtime运行。

4、类中一旦包含静态构造函数,那么编译器会自动插入一段检查代码负责检查所有静态成员和构造,以确保其优先运行。

所以在了解了以上知识后再看下面的代码就会清楚很多:

class Class1
    {
        public static string str = "fsdafdsa";
        public static readonly Class1 anobject = new Class1();

        static Class1()
        {
            System.Console.WriteLine("静态构造函数调用");
        }

        private Class1()
        {

        }

        public static Class1 c()
        {
            return new Class1();
        }
    }
static void Main(string[] args)
    {
         string s = Class1.str;
         Class1 temp =Class1.c();
                
         Console.WriteLine("程序开始");
         Console.ReadLine();
     }

结果输出时,字符串“静态构造函数调用”会第一个被输出,这是因为string s = Class1.str; 这句代码已经访问了类中的成员了,符合上面的第2条。

 

二、静态成员与常量

     对于类来说,一个类中可以包含许多成员,而且大部分成员都可以是静态的,比如:变量、属性、方法等。同样需要注意的有以下几点:

1、如果不包含静态构造函数,那么静态字段会在访问类的任何静态字段时候进行初始化及赋值。

2、除非需要访问一个静态字段,否则不必对静态成员进行初始化。

3、对于静态类,在IL的最终标记为abstract和sealed。

 

在为字段设定是否为常量(const)或只读(readonly)时,需要注意:

1、const常量会在编译时就固定,所以常量建议是不会更改的变量,否则如果一旦发生更改且没有重新编译那么程序访问的还是老的值,所以对于可能会更改的值还是设置为readonly。

2、当将变量数组设置为readonly的时候,其数组的长度是无法更改的,但是其中的值是可以更改的。

3、应用了readonly的变量可以在构造函数中对其进行更改。

posted @ 2010-12-31 16:12  kyo-yo  阅读(1332)  评论(6编辑  收藏