readonly 是做什么用的

rongbing84 2008-06-18 02:44:22
using System;

class Demo
{
public const int i = 10;
public readonly int p;
public static void Main()
{
Console.WriteLine(Demo.i);
Demo d = new Demo(100);
Console.WriteLine(d.p);
Demo d1 = new Demo(200);
Console.WriteLine(d1.p);
}

public Demo(int v)
{
this.p = v;
}
}
const是常量,readonly在这里是什么意思,有什么作用
...全文
289 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
西安风影 2008-06-18
  • 打赏
  • 举报
回复
public class Class1
{
public const int constData=10;//定义时必须赋初始值
public readonly int readonlyData;
public Class1()
{
readonlyData = 100;//正确 在类内部可以被赋值
}
}

Class1 class1 = new Class1 ();
class1.readonlyData = 10;//错误 因为只读,不可以被赋值
int data1 = Class1.constData;//正确 注意必须通过类名来访问
int data2 = class1.readonlyData;//正确 注意必须通过实例名来访问
阿牛138588 2008-06-18
  • 打赏
  • 举报
回复
只读字段,该字段只能在初始化时被赋值一次。
比如下以内容可以被编译成功:

class abc
{
public readonly int intTest=10;
public abc()
{
intTest=20;
}
}


但以下代码不会被通过,因为e不能在其他地方赋值

class abc
{
public readonly int intTest=10;
public abc()
{
intTest=20;
}
public void test()
{
intTest = 30; //这里提示错误
}
}
lovefootball 2008-06-18
  • 打赏
  • 举报
回复
const 字段只能在该字段的声明中初始化。
readonly 字段可以在声明或构造函数中初始化。
因此,根据所使用的构造函数,readonly 字段可能具有不同的值。
另外,const 字段为编译时常数,而 readonly 字段可用于运行时常数
lovefootball 2008-06-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 rongbing84 的回复:]
既然是只读的为什么可以用
public Demo(int v)
{
this.p = v;
}
给P付值,只读不是只能读取,不能付值吗
[/Quote]

MSDN说的很清楚
不知道你为什么不看

当字段声明包括 readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数中
西安风影 2008-06-18
  • 打赏
  • 举报
回复
因此const常量必须赋初始值
readonly常量可以不赋初始值
rongbing84 2008-06-18
  • 打赏
  • 举报
回复
既然是只读的为什么可以用
public Demo(int v)
{
this.p = v;
}
给P付值,只读不是只能读取,不能付值吗
西安风影 2008-06-18
  • 打赏
  • 举报
回复
const是常量,在常量区域分配内存空间,
因此const被该类所有实例共享,可以把该常量当作static理解

readonly 也是c#定义常量一种方法,与const不同的是
readonly不被该类所有实例共享,
而是每实例化一个实例时,就会给该常量分配内存空间。
ericzhangbo1982111 2008-06-18
  • 打赏
  • 举报
回复
只读的关键字
不能修改
lovefootball 2008-06-18
  • 打赏
  • 举报
回复
看MSDN
http://msdn.microsoft.com/zh-cn/library/acdd6hb7(VS.80).aspx

110,536

社区成员

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

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

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