zoukankan      html  css  js  c++  java
  • const,readonly 常量与只读

    Const是常量

    Const在编译时会被编译为静态成员,它确定于编译时期,属类型级,通过类型来访问。

    现在通过以下几种情况来说明const常量:

    (1)初始化

    public const string _name;

    这种方式是错误的,因为它的值须在编译时期确定,所以在声明要初始化。

    (2)构造器中初始化

    public const string _name= "宋江";

    public ConstReadonly()

    {

    _name = "吴用";

    }

    会有异常。

    ·为const在字面上理解就是常量,而对于赋值来说,左边不能是常量

    ·构造器初始化是在运行时期,而常量是确定于编译时期

    (3)局部应用

    做为局部常量使用。在方法Hello中:

    public string Hello()

    {

        const string _returnStr = "常量";

        return _returnStr;

    }

    (4)用于引用类型

    const只用于值类型和字串类型。如果是引用类型如:

    public const object _object = new object();

    会有异常:只能用null对引用类型进行初始化(字串除外)。

    public const object _object = null;

    因为new是运行时,而const是编译时。

    Readonly

    只读变量,也从以下几方面来说明:

    (1)初始化

    public readonly int _age;//=22;

    public readonly int _age=22;

    两种都可以。

    如果在声明时不进行初始化,将赋值默认值。

    (2)构造器

    在构造器中修改。

    public readonly int _age=22;

    public ConstReadonly()

    {

        _age = 10;

    }

    测试:

    ConstReadonly cc = new ConstReadonly();

    Assert.AreEqual(10, cc._age);

    而在构造器外和声明时初始化时,不能对只读变量赋值。

    (3)局部应用

    不能定义局部变量。

    Static readonly

    静态只读变量

    (1)初始化

    public static readonly string _password="123456";

    在声明时可以初始化也可以不初始化。

    (2)构造器

    static ConstReadonly()

    {

    _password = "123";

    }

    可以在静态构造器中进行初始化或赋值。(静态构造器是不带访问修饰符,同时不能带参数。)

    (3)局部应用

    不可以做为局部变量使用。

    在IL中:

    ·Const定义为:static literal

    ·readonly为private initonly

    ·static readonly 定义为static initonly

    总结:

    1》  const是静态的,由类型访问,不能与static同用;readonly不是静态的,由对象来访问,可以与static一起使用

    2》  const须在声明时初始化,readonly可以在声明时初始化,也可以在构造器中初始化。如果是static readonly,可以在静态构造器中初始化。

    3》  const可以定义字段和局部常量,readonly只能是字段

    4》  const中用于值类型和字串,引用类型初始化为null

    总之,常量是常量,变量不管是只读的,还是一般的还是静态的,它总归是变量。

  • 相关阅读:
    【Angular专题】 (3)装饰器decorator,一块语法糖
    【响应式编程的思维艺术】 (1)Rxjs专题学习计划
    jmeter性能测试jpgc的安装(一)
    DDMS连接夜神模拟器无法识别进程解决办法(八)
    性能测试loadrunner(五)
    性能测试loadrunner(四)
    性能测试之loadrunner(三)
    性能测试之loadrunner(二)
    性能测试概念(一)
    Fiddler之插件安装Willow(五)
  • 原文地址:https://www.cnblogs.com/monian/p/3867381.html
Copyright © 2011-2022 走看看