我在Embarcadero C ++ Builder XE8中使用以下代码。
在Unit1.h中:
private:
void SetValue (Currency value);
Currency FValue;
public:
__property Currency Value = {write= SetValue , read=FValue};
在Unit1.cpp中:
void TForm1::SetValue(Currency _Value)
{
FValue= _Value;
Label1->Caption= _Value;
}
在我打电话的主程序中:
Value = 10; // it calls SetValue and the Value will be set to 10
Value+= 10; // it does not call SetValue and Value will not be set to 20
为什么Value+= 10
不能调用SetValue(20)
?
答案 0 :(得分:1)
您不能将复合赋值运算符与属性一起使用。编译器没有实现它,也从来没有。
Value = 10;
是直接分配,因此会按预期调用属性 setter 。
Value += 10;
不会像您期望的那样翻译为Value = Value + 10;
。它实际上调用属性的 getter 来检索临时值,然后递增并将临时值分配给自身。临时从未分配回属性,这就是为什么不调用属性的 setter 。换句话说,它会转换为temp = Value; temp += 10;
。
要执行您尝试的操作,您必须单独明确使用+
和=
运算符:
Value = Value + 10;