除了C ++(因为他有运算符重载),你知道另一种OOP语言可以做(或在最坏的情况下模拟)“值语义”吗?
答案 0 :(得分:4)
在C#中,如果将“对象”定义为struct
,则它具有值语义。如果你将它定义为class
它具有引用语义(除非你使它成为不可变的,如string
,那么它的语义更类似于值1)。
我要补充一点,打破这种“隐含的”语义非常容易。
struct MyStruct
{
public StringBuilder SB;
}
MyStruct a = new MyStruct();
a.SB = new StringBuilder();
MyStruct b = a;
现在你已经打破了语义,因为a
和b
“都指向”相同的引用。
答案 1 :(得分:0)
结构也具有值语义。