C#中的不可变数据类型介绍(不可变对象、不可变集合)
可变对象在多线程并发中共享,是存在一些问题的。多线程下A线程赋值到 Name = "大毛" 这一步,其他的线程有可能读取到的数据就是:使用时只能通过Contact2的构造函数来初始化Name和Address字段。Contact2此时即为不可变对象,因为对象本身是个不可变整体。通过使用不可变对象可以不用担心数据完整性,也能保证数据安全性,不会被其他线程修改。幸好的是Net在4.5版本已经提供了不可变集合的基础类库。而旧值依旧会保留一段时间,这会使内存有极大开销,也会给GC造成回收负担,性能也比可变集合差的多。由于string的不可变特性,所以当我们使用string在保存敏感信息时,就需要特别注意。
用户评论