review——C# (1)静态构造函数

FROM P102

构造函数也可以声明为static。实例构造函数初始化类的每个新实例,而static构造函数初始化类级别的项。通常,静态构造函数初始化类的静态字段。

--初始化类级别的项的时间:

□在引用任何静态成员之前

□在创建类的任何实例之前

--静态构造函数在以下方面与实例构造函数类似

□静态构造函数的名称必须和类名相同

□构造函数不能返回值

--静态构造函数在以下方面和实例构造函数不同

□静态构造函数声明中使用static关键字

□类只能有一个静态构造函数,且不能带参数

□静态构造函数不能有访问修饰符

以下即为一个静态构造函数的示例。其形式和实例构造函数相同,只是增加了static关键字。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace review
 8 {
 9     class class1
10     {
11         public static int z;
12         int t;
13         static class1()
14         {
15 
16         }
17     }
18     class class2
19     {
20         public static int z;
21         int t;
22         static class2()
23         {
24             z = 1;
25         }
26     }
27     class Program
28     {
29         static void Main(string[] args)
30         {
31             class1 p = new class1();
32             Console.WriteLine(class1.z.ToString());
33             class2 q = new class2();
34             Console.WriteLine(class2.z.ToString());
35             Console.Read();
36         }
37     }
38 }

输出为:

0

1

通过这个例子,我们可以了解到:

1、之前所了解到的,在自己未写构造函数时,编译器会自动加上一个无参的默认构造函数。对于这一点,静态构造函数不包含在内,即就算自己写了静态构造函数,但如果没写其他构造函数,那么编译器仍然会自动加上一个无参的默认构造函数。

2、静态字段如果没有赋初值,也会像类字段一样,用空值作为默认值。(对于这里的int就是用0作为默认值)

关于静态构造函数,一些其他需要注意的有:

--类既可以有静态构造函数也可以有实例构造函数

--如同静态方法,静态构造函数不能访问所在类的实例成员,因此也不能使用this访问器

--不能从程序中显示调用静态构造函数,系统会自动调用它们,在:

类的任何实例被创建之前

类的任何静态成员被引用之前

猜你喜欢

转载自www.cnblogs.com/quintessence/p/9098090.html