**
一周学会 C# (类三)
C# 才鸟( QQ:249178521 )
**
** 8. ** ** 常量字段 ** ** **
· **_ 常量字段 _ ** ** ... **
w ** 隐含为 ** **_ static _ ** ** **
w ** 必须在声明时初始化 ** ** **
w ** 必须被初始化为编译时常量值 ** ** **
w ** 只有简单类型,枚举,字符串才可以是常量 ** ** **
** class Pair **
** { **
** public Pair(int x, int y) **
** { **
** // ??? **
** } **
** ... **
** private const int x = 0, y = 0; **
** } **
在 C# 中,常量字段隐含为 static ,但你不能显式声明一个常量字段是 static :
static const int x = 0;// 错误
常量必须被初始化,并且只能在声明时初始化:
const int x;// 错误
常量必须被初始化为编译时常量值:
const int x = Method();// 错误
只有简单类型,枚举,字符串才能被声明为常量:
const Pair p = new Pair();// 错误
** 9. ** ** 静态构造函数 ** ** **
· ** 静态构造函数初始化类 ** ** **
w ** 可以初始化 ** **_ static _ ** ** ** ** 字段而不是 ** ** c onst ** ** 字段 ** ** **
w ** 当类被装载时由 ** ** .net ** ** 调用 ** ** **
w ** 不能被调用:没有参数,没有访问修饰符 ** ** **
** class Pair **
** { **
** public static readonly Pair Origin; **
** public Pair(int x, int y) **
** { **
** this.x = x; **
** this.y = y; **
** } **
** static Pair() **
** { **
** Origin = new Pair(0, 0); **
** } **
** private int x, y; **
** } **
静态构造函数只能由 .net 调用,而不能由程序员调用。这保证它会被调用,只被调用一次,并且在恰当的时候被调用(在任何类或类被使用前)。因为程序员不能调用静态构造函数,所以静态构造函数没有参数。出于同样的原因,静态构造函数不能有访问修饰符。
静态构造函数不能被用来初始化常量字段,即使常量字段隐式为静态的。因为前面说过,常量字段必须被初始化,而且只能在它声明的时候初始化。