常量与static readonly字段有着相同之处,那它们又有区别与联系呢?

const常量在声明处进行初始化,编译时直接将值编译进元数据,运行时不能进行值更改(如下面代码中的PAI)。

实例字段可在定义处和构造函数内进行初始化。可在任意处进行更改,如果其可访问性允许(如下面代码中的radius)。

static 字段声明为类级的字段,它属于类的状态数据。可在任意处进行更改,如果其可访问性允许(如下面代码中的a)。

readonly 字段声明只读字段,只能在构造函数内对其进行更改(如下面代码中的b)。

static readonly 字段声明静态只读字段,它属于类级且只读。只能在静态构造函数内对其更改(如下面代码中的c)。

示例代码:

View Code
复制代码
    public class Code_03
    {
        public const double PAI = 3.14;
        double radius = 20;
        static int a = 10;
        readonly int b = 0;
        static readonly int c = 30;

        static Code_03()
        {
            a = 100;
            c = 1000;
            //错误 非静态的字段、方法或属性“ConsoleApp.Example03.Code_03.c”要求对象引用    
            //radius = 1;
            //b = -1;
        }
        public Code_03()
        {
            radius = 1;
            a = -1;
            b = -1;
            //错误 无法对静态只读字段赋值(静态构造函数或变量初始值中除外)
            //c = -1;
        }
        public void MyMethod()
        {
            radius = 1;
            a = -1;
            //错误 无法对静态只读字段赋值(静态构造函数或变量初始值中除外)
            //b = -1;
            //c = -1;
        }
    }
posted on 2012-07-24 15:50  Beyondsky  阅读(356)  评论(0)    收藏  举报