【发布时间】:2015-03-11 10:47:10
【问题描述】:
有没有办法告诉编译器,从这里开始,表达式的结果应该被认为是不可变的?
...
"const" MyClass str = b[0].x+b[1].x;
... // from here on str is an immutable object
还有 const 或 readonly 变量对性能有好处吗?
添加:@Onur: (a) 应允许分配新值; (b) 不允许使用 str 的当前值,包括可以通过 str 访问的所有内容,例如 str 的任何字段以及 str 以任何方式引用的所有内容; (c) 举例可能很困难。但我试图改写它。 str 应该是任何类型的数据结构(对象、集合和它们的任何混合)。将分配给 str 的对象是可变的,并且可以被另一个引用修改。但是当分配给 str 时,我想确保通过 str 不能修改对象。其背后的想法是,对象一旦创建,将被传递给不同的线程以处理对象的数据,我想确保我不会意外修改通过引用传递给不同线程的对象.所以我想要某种参考来防止我修改任何数据。假设我想要某种使完整对象只读的引用。
【问题讨论】:
-
看起来您混淆了 constness 和 immutability。字符串在 C# 中已经是不可变的。
-
const 或 readonly 没有显着的性能优势,它们主要是为了提高可维护性。
-
我认为 const 变量不应该在运行时改变(初始化)。
-
我将 String 更改为 MyClass。没想到 String 默认是只读的。
-
您能否澄清一下 (a) str 是否不应该被分配一个新值; (b) str 的当前值不可修改或 (c) 有所不同;也许一个例子可以帮助展示什么应该(不)被允许
标签: c# immutability