【发布时间】:2010-10-12 19:46:01
【问题描述】:
String 是一种引用类型,尽管它具有值类型的大部分特征,例如不可变和重载 == 以比较文本而不是确保它们引用同一个对象。
那么为什么字符串不只是一个值类型呢?
【问题讨论】:
-
由于对于不可变类型的区别主要是实现细节(撇开
is测试),答案可能是“出于历史原因”。复制的性能不是原因,因为不需要物理复制不可变对象。现在,如果不破坏实际使用is检查(或类似约束)的代码,就不可能进行更改。 -
顺便说一句,这与 C++ 的答案相同(尽管值和引用类型之间的区别在语言中并不明确),使
std::string表现得像一个集合的决定是一个老错误,不能立即修复。
标签: c# string clr value-type reference-type