一周学会C#(结构三)

王朝c#·作者佚名  2006-01-08
宽屏版  字体: |||超大  

一周学会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 字段而不是const 字段

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

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有