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

C#基础 [12] 成员常量和只读字段

2013-01-02 22:09 309 查看
一、成员常量

  1.常量

    常量是在编译时已知并在程序的生存期内不发生更改的不可变值。常量使用 const 修饰符进行声明。只有 C# 内置类型(System.Object 除外)可以声明为 const,用户定义的类型(包括类、结构和数组)不能为 const。常量分为成员常量和本地常量。

  2.成员常量

    成员常量就是声明在类中的常量,它与前面讲过的本地常量相似,只是作用域不同:本地常量只存在方法中,而成员常量存在于类当中。

    下面是一个声明成员常量的示例,MyCalendar类中包含一个成员常量months:

class MyCalendar
{
// 声明一个成员常量
public const int months = 12;
}


    成员常量有如下特征:

      1).成员常量使用const关键字声明,并且可以有修饰符(默认为private)。这一点在上例中已经得到了证明。

      2).成员常量必须在声明的时候初始化。试图声明一个没有初始化表达式的成员常量将会得到如下图所示的错误提示:

        View Code

class MyAge
{
// 声明一个只读字段,在声明的同时初始化
readonly int _year = 1;

// 构造函数
MyAge(int year)
{
// 在构造函数中改变只读字段的值
_year = year;
}
void ChangeYear()
{
//_year = 1967; // 在初始化和构造函数之外,不可改变readonly字段的值.
}
}


三、成员常量和只读字段不同

  1.const字段只能在声明语句中初始化,而且必须初始化,初始化之后在任何地方都不能改变;readonly字段既可以在声明时初始化,也可以在构造函数中改变它的值:如果是实例只读字段,可以在实例构造函数中改变它的值,如果是静态只读字段,则可以在静态构造函数中改变它的值。

  2.const字段的值必须在编译器决定,编译完成之后它的值就被替换为字面量;readonly字段的值可以在运行时决定,可以在不同的构造函数中设置不同的值。

  3.const总是像静态字段,在类的外部要通过"类名.常量名"的方式访问;readonly字段既可以是静态字段,也可以是实例字段。

  4.const在内存中没有存储位置,而readonly字段在内存中有存储位置。

参考:成员常量:http://msdn.microsoft.com/zh-cn/library/ms173119(VS.100).aspx

   只读字段:http://msdn.microsoft.com/zh-cn/library/acdd6hb7(VS.100).aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: