一周学会C#(结构三)

**

一周学会 C# (结构一)

C# 才鸟( QQ:249178521 )

**

** 10. ** ** 常量字段 ** ** **

· **_ 常量字段 _ ** ** ... **

w ** 隐含为 ** **_ static _ ** ** **

w ** 必须在声明时初始化 ** ** **

w ** 必须被初始化为编译时常量值 ** ** **

w ** 只有简单类型,枚举,字符串才可以是常量 ** ** **

** struct 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();// 错误

** 11. ** ** 找错 ** ** **

** struct HHG **

** { **

** HHG(int toTheGalaxy) **

** { **

** question = 9 * 6; 1 **

** ... **

** } **

** string cover = "Don't Panic"; 2 **

** static const int answer = 42; 3 **

** const Hiker arthur = new Hiker(); 4 **

** const int question; 5 **

** ... **

** } **

第 1 个语句的错误:不能在构造函数中初始化常量,常量只能在声明时初始化。

第 2 个语句的错误:结构中不能在声明实例字段时进行初始化,但在类中是可以的。

第 3 个语句的错误:不能显式声明常量字段为 static ,常量字段只能隐式为 static 。

第 4 个语句的错误:常量字段只能用于简单类型,枚举,字符串。

第 5 个语句的错误:常量字段在声明时没有被初始化。

** 12 ** ** .局部变量 ** ** **

· ** 局部变量 ** ** ... **

w ** 可以被声明为 ** **_ const _ ** ** ( ** ** 规则同字段 ** ** ) **

w ** 不能被声明为 ** **_ static _ ** **_ 或 _ ** ** or __ **

** struct Pair **

** { **

** void okay() **

** { **

** const int answer = 42; **

** ... **

** } **

** void compileTimeErrors() **

** { **

** const int local = call(); // ** ** 错误,必须 ** 被初始化为编译时常量值

** const Pair origin = ...; // ** ** 错误,常量只能为简单类型,枚举,字符串 **

** readonly Pair p = ...; // ** ** 错误,只有字段才能声明为 ** ** readonly **

** ... **

** } **

** ... **

** } **

** 13. ** ** 静态构造函数 ** ** **

· ** 静态构造函数初始化类 ** ** **

w ** 可以初始化 ** **_ static _ ** ** ** ** 字段而不是 ** ** c onst ** ** 字段 ** ** **

w ** 当类被装载时由 ** ** .net ** ** 调用 ** ** **

w ** 不能被调用:没有参数,没有访问修饰符 ** ** **

** struct 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 调用,而不能由程序员调用。这保证它会被调用,只被调用一次,并且在恰当的时候被调用(在任何类或结构被使用前)。因为程序员不能调用静态构造函数,所以静态构造函数没有参数。出于同样的原因,静态构造函数不能有访问修饰符。

静态构造函数不能被用来初始化常量字段,即使常量字段隐式为静态的。因为前面说过,常量字段必须被初始化,而且只能在它声明的时候初始化。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus