通常情况下,对象的字段值是可以修改的......
但是,在.NET基类库中,我们发现......
值类型DataTime无法修改
DateTime data = new DateTime(2015, 10, 1);
date.AddDays(1); //增加一天
Console.WriteLine(date); // 输出:2015/10/1
字符串类型无法修改
string str = "abcd";
str.ToUpper(); // 改为大写
Console.WriteLine(str); //输出:abcd
- DateTime和string类型变量居然都是只读的!一旦创建之后,内容不可改!
为什么要设计“只读”的类?
- 为发挥多核CPU的计算能力,应用程序应该是“多线程”的
- 在“多线程”环境下,多个线程访问同一个对象时,因为对象是只读的,无需互斥,就可以保证数据读取不会出错。
怎样设计只读的类?
当外界期望修改对象的字段值时,不是修改原有对象的字段值,而是新建一个对象,让它的字段值符合要求,然后把这个新对象返回给外界!
class MyReadOnlyClass
{
private int Value = 100;
public MyReadOnlyClass add(int step)
{
MyReadOnlyClass obj = new MyReadOnly();
obj.Value = this.Value;
obj.Value += step;
return obj;
}
}