C#中const和readonly有什么区别?

guoxiny 2003-05-08 05:42:03
定义一个const变量和readonly变量有什么不同?
...全文
209 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqchen79 2003-05-09
  • 打赏
  • 举报
回复
另外,const是编译期间替换的,而readonly static是运行期间引用的。
例如程序集A1引用了A2的一个const变量C,那么编译期间C的值就会被Copy到A1中。在运行时刻A1并不依赖于A2。而readonly static则相反。
yuwen16 2003-05-09
  • 打赏
  • 举报
回复
又学到不少东西。呵呵。
smart 2003-05-09
  • 打赏
  • 举报
回复
谢谢楼各位大哥你指点
pcnetman 2003-05-08
  • 打赏
  • 举报
回复
to:guoxiny(狼)
类属于此用类型的呀,此用类型都是可以的:

引用类型共分四种类型:
类,接口,数组,委派。
snewxf 2003-05-08
  • 打赏
  • 举报
回复
同意斑竹说的
const是常量,一旦声明就不能更改

readonly是变量,声明之后,可以在构造器里面初始化其值,
并且赋值后就不能在修改其值。
guoxiny 2003-05-08
  • 打赏
  • 举报
回复
const修饰的值的类型也有限制,
它只能为下列类型之一(或能够转换为下列类型的):
sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool, string, enum类型, 或引用类型

不对吧。类也可以为常量类吧。

class a
{}

const a a1 = new a();
这样不行吗?
pcnetman 2003-05-08
  • 打赏
  • 举报
回复
readonly修饰符来表示只读域,
const来表示不变常量。
---
只读域只能在初始化--声明初始化或构造器初始化--的过程中赋值,
其他地方不能进行对只读域的赋值操作,否则编译器会报错。
只读域可以是实例域也可以是静态域。
只读域的类型可以是C#语言的任何类型。
---
const修饰的常量必须在声明的同时赋值,
而且要求编译器能够在编译时期计算出这个确定的值。
const修饰的常量为静态变量,
不能够为对象所获取。
const修饰的值的类型也有限制,
它只能为下列类型之一(或能够转换为下列类型的):
sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool, string, enum类型, 或引用类型。
---
当我们需要一个const的常量时,
但它的类型又限制了它不能在编译时期被计算出确定的值来,
我们可采取将之声明为static readonly来解决。
但两者之间还是有一点细微的差别的。
const修饰的常量是在编译时便被计算出确定的值,并代换到引用该常量的每一个地方,
而readonly时在运行时才确定的量--只是在初始化后我们不希望它的值再改变。
chainet 2003-05-08
  • 打赏
  • 举报
回复
同意斑竹,
就是说readonly就好像是CD-R,const是CD-Rom,哈哈~
timmy3310 2003-05-08
  • 打赏
  • 举报
回复
const是常量,一旦声明就不能更改

readonly是变量,声明之后,可以在构造器里面初始化其值
guoxiny 2003-05-08
  • 打赏
  • 举报
回复
没人知道吗

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧