A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 崔增阳 中级黑马   /  2014-4-14 10:39  /  1152 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

const 和 static readonly 有什么区别?

3 个回复

正序浏览
const 常量,是隐式静态的,赋初始值后从未变过,定义常量时必须为常量指定初始值
readonly 只读字段,和常量相似,不能在赋初始值后改变。然而和常量不同的是,赋给只读字段的值可以在运行时决定,因此在构造函数作用域中进行赋值是合法的。
static readonly 静态只读字段,和常量不同,只读字段不是隐式静态的,所以从类的级别公开字段,就必须显示使用static关键字。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
const为编译时常量,程序编译时将对常量值进行解析,并将所有常量引用替换为相应值
static readonly为运行时常量,程序运行时进行赋值,赋值完成后便无法更改,因此也有人称其为只读变量
const修饰的常量在声明的时候必须初始化;static readonly修饰的常量则可以延迟到构造函数初始化
const常量既可以声明在类中也可以在函数体内,但是static readonly常量只能声明在类中

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
1. const关键字用于修改字段或局部变量的声明。它制定字段或局部变量的值不能被修改。常数声明引入给定类型的一个或多个常数;
2. const数据成员的声明式必须包含初值,且初值必须是一个常量表达式。因为它是在编译时就需要完全评估;
3. const成员可以使用另一个const成员来初始化,前提是两者之间没有循环依赖;
4. readonly在运行期间评估赋值,使我们得以确保"只读访问"的前提下,把object的初始化动作推迟到运行期间;
5. const字段只能在该字段的声明中初始化;
6. readonly字段可以在声明或构造函数中初始化;
7. 因此,根据所使用的构造函数,readonly字段可能具有不同的值。另外,const字段是编译时常数,而readonly字段可用于运行时常数。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马