您的位置:首页 > 编程语言 > C#

constants and fields in c#

2010-10-12 23:22 309 查看
今天回顾了C#的常量和字段,又学习了不少,写点东西跟大家分享,也有利于自己记忆。

首先,我们说说C#的常量,顾名思义,常量存储的就是不可更改的值,那么常量在type中又是怎样被定义的呢?首先可以被定义为常量的类型只能是简单类
型:Boolean、
Char、Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64、Single、Double、
Decimal、
String,当然有一种特殊情况,可以对非简单类型的变量为声明为constant,只有在那个变量的值为null的时候。以下为代码示例:

using
System;

public
sealed
class
SomeType

{

public
const
int
SomeNumber = 32;

public
const
SomeType = null
;

}

常量是被当做类型变量的,就像static变量一样,常量会包含在元数据中,常量的值直接嵌入到元数据中。在编译的时候,complier根据常量
符号直接到元数据中找到那个值,然后直接嵌入到IL代码中,所以不需要动态分配内存。所以假如把上面那一段编译为dll文件的话(也即是一个
assembly),现在有这么一段代码:

using
System;

public
class
Program

{

Console.WriteLine("The const number is {0}
",SomeType.SomeNumber);

}

编译这段代码,然后执行,毫无疑问结果就是32,如果现在把SomeNumber改为50,重新把它编译为dll文件,如果不重新编译上一段代码,执行结果不会改变,要想结果变为50,就必

须重新编译一遍,执行,结果就变为50,在这种情况下,dll文件甚至都不会被加载。

讲完常量,让我们接着说说字段是什么。

字段是一个类型的变量,它可以是一个值类型变量,也可以是一个引用类型变量,字段一般会有四种修饰符:static 、default、readonly、volatile。

在这里就简单讲述一下static 和readonly的用法:

static的意思就是说这个字段是属于类型的,表示类的状态,而default是表示类型实例的状态。

readonly表示这个字段是只读的,不能写,只能在构造函数中初始化。(反射能够用来修改readonly字段,反射是个啥玩意?只听说过,目前还没接触到)

字段是需要动态分配内存的,所以字段的值都是在运行时才能获得的。

采用常量那段类似的一个代码示例:

using
System;

public
sealed
class
SomeType

{

public
static
readonly
SomeNumber = 32;

}

假如现在依旧有一个程序引用它编译之后的DLL,如下:

using
System;

public
class
Program

{

Console.WriteLine("The const number is {0}
",SomeType.SomeNumber);

}

编译这段代码,结果依旧是32,如果把SomeNumber改为50,重新编译为dll,那么无需重新编译这段代码,直接执行结果变为50。

最后说一点,readonly声明的引用字段,引用变量是不可改变的,即不能指向别的对象,它指向的那个对象本身是可以改变的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: